Author: ffang Date: Fri Nov 16 02:24:38 2012 New Revision: 1410166 URL: http://svn.apache.org/viewvc?rev=1410166&view=rev Log: Merged revisions 1409770 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes
................ r1409770 | ffang | 2012-11-15 21:28:32 +0800 (四, 15 11 2012) | 21 lines Merged revisions 1409656,1409658-1409660 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1409656 | ffang | 2012-11-15 14:06:32 +0800 (四, 15 11 2012) | 1 line [CXF-4594]when use code first, If no setter method in Exception class, the property can't get marshalled nor available in generated wsdl ........ r1409658 | ffang | 2012-11-15 14:19:11 +0800 (四, 15 11 2012) | 1 line [CXF-4594]also add a testcase ........ r1409659 | ffang | 2012-11-15 14:21:22 +0800 (四, 15 11 2012) | 1 line [CXF-4594]refactor org.apache.cxf.jaxb.Utils a little bit to make it more clear ........ r1409660 | ffang | 2012-11-15 14:38:32 +0800 (四, 15 11 2012) | 1 line [CXF-4594]make checkstyle happy ........ ................ Added: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AddNumbersException.java - copied unchanged from r1409770, cxf/branches/2.6.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AddNumbersException.java Modified: cxf/branches/2.5.x-fixes/ (props changed) cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/Utils.java cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello.java cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloInterface.java cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers-fromjava.wsdl Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Merged /cxf/trunk:r1409656-1409660 Merged /cxf/branches/2.6.x-fixes:r1409770 Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java (original) +++ cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java Fri Nov 16 02:24:38 2012 @@ -398,8 +398,9 @@ class JAXBContextInitializer extends Ser static boolean isMethodAccepted(Method method, XmlAccessType accessType) { // We only accept non static property getters which are not marked @XmlTransient if (Modifier.isStatic(method.getModifiers()) - || method.isAnnotationPresent(XmlTransient.class) - || !Modifier.isPublic(method.getModifiers())) { + || method.isAnnotationPresent(XmlTransient.class) + || !Modifier.isPublic(method.getModifiers()) + || "getClass".equals(method.getName())) { return false; } @@ -409,11 +410,17 @@ class JAXBContextInitializer extends Ser || method.getDeclaringClass().equals(Throwable.class)) { return false; } - + if (method.getName().startsWith("get") + || method.getName().startsWith("is")) { + //continue with below check. + } else { + return false; + } int beginIndex = 3; if (method.getName().startsWith("is")) { beginIndex = 2; } + Method setter = null; try { setter = method.getDeclaringClass() @@ -422,10 +429,11 @@ class JAXBContextInitializer extends Ser } catch (Exception e) { //getter, but no setter } - if (setter == null - || setter.isAnnotationPresent(XmlTransient.class) - || !Modifier.isPublic(setter.getModifiers())) { + if ((setter != null) + && ((setter.isAnnotationPresent(XmlTransient.class) + || !Modifier.isPublic(setter.getModifiers())))) { return false; + } if (accessType == XmlAccessType.NONE Modified: cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java (original) +++ cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java Fri Nov 16 02:24:38 2012 @@ -491,7 +491,7 @@ public final class JAXBEncoderDecoder { m = Utils.getMethod(cls, accessType, "is" + s); } Type type = m.getGenericReturnType(); - Method m2 = Utils.getMethod(cls, accessType, "set" + s, m.getReturnType()); + Object o = null; if (JAXBSchemaInitializer.isArray(type)) { Class<?> compType = JAXBSchemaInitializer .getArrayComponentType(type); @@ -499,7 +499,7 @@ public final class JAXBEncoderDecoder { q, compType, createList(type)); - Object o = ret; + o = ret; if (!isList(type)) { if (compType.isPrimitive()) { o = java.lang.reflect.Array.newInstance(compType, ret.size()); @@ -510,12 +510,23 @@ public final class JAXBEncoderDecoder { o = ret.toArray((Object[])Array.newInstance(compType, ret.size())); } } - - m2.invoke(obj, o); } else { - Object o = getElementValue(u.unmarshal(reader, Utils.getMethodReturnType(m))); - Utils.setMethodValue(m, m2, obj, o); + o = getElementValue(u.unmarshal(reader, Utils.getMethodReturnType(m))); } + Method m2 = Utils.getMethod(cls, accessType, "set" + s, m.getReturnType()); + if (m2 != null) { + if (JAXBSchemaInitializer.isArray(type)) { + m2.invoke(obj, o); + } else { + Utils.setMethodValue(m, m2, obj, o); + } + } else { + Field fn = ReflectionUtil.getDeclaredField(cls, q.getLocalPart()); + if (fn != null) { + ReflectionUtil.setAccessible(fn); + fn.set(obj, o); + } + } } } return (Exception)obj; Modified: cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/Utils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/Utils.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/Utils.java (original) +++ cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/Utils.java Fri Nov 16 02:24:38 2012 @@ -136,7 +136,8 @@ final class Utils { if (method.isBridge() || Modifier.isStatic(method.getModifiers()) || method.isAnnotationPresent(XmlTransient.class) - || method.getDeclaringClass().equals(Throwable.class)) { + || method.getDeclaringClass().equals(Throwable.class) + || "getClass".equals(method.getName())) { return false; } // Allow only public methods if PUBLIC_MEMBER access is requested @@ -169,9 +170,11 @@ final class Utils { String setterName = "set" + m.getName().substring(index); Class<?> paramTypes = m.getReturnType(); Method setter = getDeclaredMethod(declaringClass, setterName, paramTypes); - if (setter != null && !setter.isAnnotationPresent(XmlTransient.class)) { - return true; - } + + if (setter != null && setter.isAnnotationPresent(XmlTransient.class)) { + return false; + } + return true; } } return false; Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java Fri Nov 16 02:24:38 2012 @@ -42,9 +42,11 @@ import org.w3c.dom.Node; import org.apache.cxf.Bus; import org.apache.cxf.endpoint.Server; +import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.frontend.ServerFactoryBean; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; +import org.apache.cxf.jaxws.service.AddNumbersException; import org.apache.cxf.jaxws.service.ArrayService; import org.apache.cxf.jaxws.service.ArrayServiceImpl; import org.apache.cxf.jaxws.service.Entity; @@ -138,7 +140,7 @@ public class CodeFirstTest extends Abstr Service service = bean.create(); InterfaceInfo i = service.getServiceInfos().get(0).getInterface(); - assertEquals(4, i.getOperations().size()); + assertEquals(5, i.getOperations().size()); ServerFactoryBean svrFactory = new ServerFactoryBean(); svrFactory.setBus(bus); @@ -222,6 +224,32 @@ public class CodeFirstTest extends Abstr assertEquals(2, result.size()); } + @Test + public void testException() throws Exception { + Hello serviceImpl = new Hello(); + EndpointImpl ep = new EndpointImpl(getBus(), serviceImpl, (String) null); + ep.publish("local://localhost:9090/hello"); + ep.getServer().getEndpoint().getInInterceptors().add(new LoggingInInterceptor()); + ep.getServer().getEndpoint().getOutInterceptors().add(new LoggingOutInterceptor()); + QName serviceName = new QName("http://service.jaxws.cxf.apache.org/", "HelloService"); + QName portName = new QName("http://service.jaxws.cxf.apache.org/", "HelloPort"); + + // need to set the same bus with service , so use the ServiceImpl + ServiceImpl service = new ServiceImpl(getBus(), (URL)null, serviceName, null); + service.addPort(portName, "http://schemas.xmlsoap.org/soap/", "local://localhost:9090/hello"); + + HelloInterface proxy = service.getPort(portName, HelloInterface.class); + ClientProxy.getClient(proxy).getInFaultInterceptors().add(new LoggingInInterceptor()); + ClientProxy.getClient(proxy).getInInterceptors().add(new LoggingInInterceptor()); + try { + proxy.addNumbers(1, -2); + fail("should throw AddNumbersException"); + } catch (AddNumbersException e) { + assertEquals(e.getInfo(), "Sum is less than 0."); + } + + } + @Test public void testRpcClient() throws Exception { Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstWSDLTest.java Fri Nov 16 02:24:38 2012 @@ -62,7 +62,7 @@ public class CodeFirstWSDLTest extends A Service service = bean.create(); InterfaceInfo i = service.getServiceInfos().get(0).getInterface(); - assertEquals(4, i.getOperations().size()); + assertEquals(5, i.getOperations().size()); ServerFactoryBean svrFactory = new ServerFactoryBean(); svrFactory.setBus(bus); @@ -100,7 +100,7 @@ public class CodeFirstWSDLTest extends A javax.wsdl.PortType portType = d.getPortType(portTypeName); assertNotNull(portType); - assertEquals(4, portType.getOperations().size()); + assertEquals(5, portType.getOperations().size()); } @Test @@ -124,7 +124,7 @@ public class CodeFirstWSDLTest extends A javax.wsdl.PortType portType = d.getPortType(portTypeName); assertNotNull(portType); - assertEquals(4, portType.getOperations().size()); + assertEquals(5, portType.getOperations().size()); } @Test public void testExcludeOnInterface() throws Exception { Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello.java Fri Nov 16 02:24:38 2012 @@ -68,4 +68,12 @@ public class Hello { ret.add("Bonjour" + list.get(1)); return ret; } + + @WebMethod + public String addNumbers(int arg0, int arg1) throws AddNumbersException { + if (arg0 + arg1 < 0) { + throw new AddNumbersException("Sum is less than 0."); + } + return "Result = " + String.valueOf(arg0 + arg1); + } } Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello2.java Fri Nov 16 02:24:38 2012 @@ -21,6 +21,7 @@ package org.apache.cxf.jaxws.service; import java.util.ArrayList; import java.util.List; +import javax.jws.WebMethod; import javax.jws.WebService; @WebService(endpointInterface = "org.apache.cxf.jaxws.service.HelloInterface") @@ -50,4 +51,11 @@ public class Hello2 implements HelloInte return null; } + @Override + @WebMethod + public String addNumbers(int arg0, int arg1) throws AddNumbersException { + // TODO Auto-generated method stub + return null; + } + } Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Hello3.java Fri Nov 16 02:24:38 2012 @@ -21,6 +21,7 @@ package org.apache.cxf.jaxws.service; import java.util.ArrayList; import java.util.List; +import javax.jws.WebMethod; import javax.jws.WebService; @WebService(serviceName = "MyService", @@ -53,4 +54,11 @@ public class Hello3 implements HelloInte return null; } + @Override + @WebMethod + public String addNumbers(int arg0, int arg1) throws AddNumbersException { + // TODO Auto-generated method stub + return null; + } + } Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloInterface.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloInterface.java?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloInterface.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloInterface.java Fri Nov 16 02:24:38 2012 @@ -33,4 +33,6 @@ public interface HelloInterface { String[] getStringArray(String[] strs); @WebMethod List<String> getStringList(List<String> list); + @WebMethod + String addNumbers(int arg0, int arg1) throws AddNumbersException; } Modified: cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers-fromjava.wsdl URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers-fromjava.wsdl?rev=1410166&r1=1410165&r2=1410166&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers-fromjava.wsdl (original) +++ cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/add_numbers-fromjava.wsdl Fri Nov 16 02:24:38 2012 @@ -28,7 +28,9 @@ under the License. targetNamespace="http://server.addr_fromjava.ws.systest.cxf.apache.org/"> <xsd:element name="AddNumbersException" type="tns:AddNumbersException"/> <xsd:complexType name="AddNumbersException"> - <xsd:sequence/> + <xsd:sequence> + <xsd:element name="detail" type="xsd:string"/> + </xsd:sequence> </xsd:complexType> <xsd:element name="addNumbers3" type="tns:addNumbers3"/> <xsd:complexType name="addNumbers3"> @@ -158,4 +160,4 @@ under the License. <soap:address location="http://localhost:9093/AddNumberImplPort"/> </wsdl:port> </wsdl:service> -</wsdl:definitions> \ No newline at end of file +</wsdl:definitions>
