From: <jbo...@li...> - 2006-07-05 14:34:45
|
Author: tho...@jb... Date: 2006-07-05 10:34:18 -0400 (Wed, 05 Jul 2006) New Revision: 566 Modified: trunk/src/main/java/org/jboss/ws/client/CommonClient.java trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB21.java trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java trunk/src/main/java/org/jboss/ws/metadata/ClientEndpointMetaData.java trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java trunk/src/main/java/org/jboss/ws/metadata/ServerEndpointMetaData.java trunk/src/main/java/org/jboss/ws/soap/SOAPMessageContextImpl.java trunk/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java trunk/src/test/java/org/jboss/test/ws/jbws871/JBWS871TestCase.java Log: Fix JAXB array handling Modified: trunk/src/main/java/org/jboss/ws/client/CommonClient.java =================================================================== --- trunk/src/main/java/org/jboss/ws/client/CommonClient.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/client/CommonClient.java 2006-07-05 14:34:18 UTC (rev 566) @@ -55,6 +55,7 @@ import org.jboss.ws.metadata.ParameterMetaData; import org.jboss.ws.metadata.ServiceMetaData; import org.jboss.ws.metadata.UnifiedMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.soap.EndpointInfo; import org.jboss.ws.soap.MessageContextAssociation; import org.jboss.ws.soap.SOAPConnectionImpl; @@ -188,7 +189,7 @@ ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, new QName(Constants.NS_JBOSSWS_URI, "AnonymousService")); wsMetaData.addService(serviceMetaData); - epMetaData = new ClientEndpointMetaData(serviceMetaData, new QName(Constants.NS_JBOSSWS_URI, "AnonymousEndpoint")); + epMetaData = new ClientEndpointMetaData(serviceMetaData, new QName(Constants.NS_JBOSSWS_URI, "AnonymousEndpoint"), Type.JAXRPC); epMetaData.setStyle(Style.RPC); serviceMetaData.addEndpoint(epMetaData); Modified: trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java =================================================================== --- trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/deployment/JAXWSClientMetaDataBuilder.java 2006-07-05 14:34:18 UTC (rev 566) @@ -45,6 +45,7 @@ import org.jboss.ws.metadata.TypeMappingMetaData; import org.jboss.ws.metadata.TypesMetaData; import org.jboss.ws.metadata.UnifiedMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.wsdl.NCName; import org.jboss.ws.metadata.wsdl.WSDLBinding; import org.jboss.ws.metadata.wsdl.WSDLBindingOperation; @@ -127,7 +128,7 @@ for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints()) { QName portName = wsdlEndpoint.getQName(); - ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName); + ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, Type.JAXWS); epMetaData.setEndpointAddress(wsdlEndpoint.getAddress()); serviceMetaData.addEndpoint(epMetaData); Modified: trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java =================================================================== --- trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/deployment/JAXWSMetaDataBuilder.java 2006-07-05 14:34:18 UTC (rev 566) @@ -41,6 +41,7 @@ import org.jboss.ws.metadata.ServerEndpointMetaData; import org.jboss.ws.metadata.ServiceMetaData; import org.jboss.ws.metadata.UnifiedMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.wsdl.WSDLUtils; /** An abstract annotation meta data builder. @@ -86,9 +87,8 @@ // Setup the ServerEndpointMetaData QName portName = new QName(targetNS, portTypeName + "Port"); - ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName); + ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName, Type.JAXWS); sepMetaData.setLinkName(linkName); - sepMetaData.setAnnotated(true); sepMetaData.setStyle(Style.DOCUMENT); sepMetaData.setParameterStyle(ParameterStyle.BARE); Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java =================================================================== --- trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/deployment/JSR109ClientMetaDataBuilder.java 2006-07-05 14:34:18 UTC (rev 566) @@ -37,6 +37,7 @@ import org.jboss.ws.metadata.EndpointMetaData; import org.jboss.ws.metadata.ServiceMetaData; import org.jboss.ws.metadata.UnifiedMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData; import org.jboss.ws.metadata.j2ee.UnifiedServiceRefMetaData; import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping; @@ -170,7 +171,7 @@ for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints()) { QName portName = wsdlEndpoint.getQName(); - ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName); + ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, Type.JAXRPC); epMetaData.setEndpointAddress(wsdlEndpoint.getAddress()); serviceMetaData.addEndpoint(epMetaData); Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java =================================================================== --- trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/deployment/JSR109ServerMetaDataBuilder.java 2006-07-05 14:34:18 UTC (rev 566) @@ -41,6 +41,7 @@ import org.jboss.ws.metadata.ServerEndpointMetaData; import org.jboss.ws.metadata.ServiceMetaData; import org.jboss.ws.metadata.UnifiedMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData; import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData; import org.jboss.ws.metadata.j2ee.UnifiedEjbPortComponentMetaData; @@ -126,7 +127,7 @@ // set service name serviceMetaData.setQName(wsdlEndpoint.getWsdlService().getQName()); - ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName); + ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName, Type.JAXRPC); sepMetaData.setPortComponentName(pcMetaData.getPortComponentName()); String ejbLink = pcMetaData.getEjbLink(); String servletLink = pcMetaData.getServletLink(); Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java =================================================================== --- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java 2006-07-05 14:34:18 UTC (rev 566) @@ -71,6 +71,7 @@ import org.jboss.ws.metadata.TypeMappingMetaData; import org.jboss.ws.metadata.TypesMetaData; import org.jboss.ws.metadata.UnifiedMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData; import org.jboss.ws.metadata.j2ee.UnifiedInitParamMetaData; import org.jboss.ws.metadata.jsr181.HandlerChainMetaData; @@ -139,9 +140,8 @@ // Setup the ServerEndpointMetaData QName portName = new QName(targetNS, portTypeName + "Port"); - ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName); + ServerEndpointMetaData sepMetaData = new ServerEndpointMetaData(serviceMetaData, portName, Type.JAXWS); sepMetaData.setLinkName(linkName); - sepMetaData.setAnnotated(true); sepMetaData.setServiceEndpointImplName(sepClass.getName()); sepMetaData.setServiceEndpointInterfaceName(wsClass.getName()); Modified: trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB21.java =================================================================== --- trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB21.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/integration/jboss/ServiceEndpointInvokerEJB21.java 2006-07-05 14:34:18 UTC (rev 566) @@ -47,6 +47,7 @@ import org.jboss.ws.handler.HandlerChainBaseImpl; import org.jboss.ws.jaxrpc.SOAPFaultExceptionHelper; import org.jboss.ws.metadata.ServerEndpointMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.j2ee.UnifiedApplicationMetaData; import org.jboss.ws.metadata.j2ee.UnifiedBeanMetaData; import org.jboss.ws.metadata.j2ee.UnifiedHandlerMetaData.HandlerType; @@ -78,8 +79,8 @@ /** Initialize the service endpoint */ public void initServiceEndpoint(ServiceEndpointInfo seInfo) throws ServiceException { - ServerEndpointMetaData endpointMetaData = seInfo.getServerEndpointMetaData(); - String ejbName = endpointMetaData.getLinkName(); + ServerEndpointMetaData epMetaData = seInfo.getServerEndpointMetaData(); + String ejbName = epMetaData.getLinkName(); if (ejbName == null) throw new WSException("Cannot obtain ejb-link from port component"); @@ -89,8 +90,8 @@ throw new WSException("Cannot obtain ejb meta data for: " + ejbName); // verify the service endpoint - String seiName = endpointMetaData.getServiceEndpointInterfaceName(); - if ((!endpointMetaData.isAnnotated()) && seiName != null) + String seiName = epMetaData.getServiceEndpointInterfaceName(); + if (epMetaData.getType() == Type.JAXRPC && seiName != null) { String bmdSEI = beanMetaData.getServiceEndpoint(); if (seiName.equals(bmdSEI) == false) Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java =================================================================== --- trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java 2006-07-05 14:34:18 UTC (rev 566) @@ -24,6 +24,7 @@ // $Id$ import java.beans.PropertyDescriptor; +import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.List; @@ -104,6 +105,30 @@ } } + public static boolean matchResponseParameters(OperationMetaData opMetaData, Class returnType) + { + assertOperationMetaData(opMetaData); + + ParameterMetaData paramMetaData = opMetaData.getReturnParameter(); + Class resStructType = paramMetaData.getJavaType(); + + log.debug("matchResponseParameters: " + resStructType.getName()); + try + { + boolean pass = true; + if (returnType != void.class) + { + resStructType.getConstructor(new Class[] { returnType }); + } + return pass; + } + catch (Exception ex) + { + log.debug("Invalid response wrapper: " + ex); + return false; + } + } + public static Object wrapRequestParameters(OperationMetaData opMetaData, Object[] inParams) { assertOperationMetaData(opMetaData); @@ -312,7 +337,7 @@ clazz.addMethod(CtNewMethod.setter("set" + capitalize(name), field)); } - wrapperType = (Class) pool.toClass(clazz, loader); + wrapperType = (Class)pool.toClass(clazz, loader); } catch (Exception e) { Modified: trunk/src/main/java/org/jboss/ws/metadata/ClientEndpointMetaData.java =================================================================== --- trunk/src/main/java/org/jboss/ws/metadata/ClientEndpointMetaData.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/metadata/ClientEndpointMetaData.java 2006-07-05 14:34:18 UTC (rev 566) @@ -32,6 +32,7 @@ import org.jboss.logging.Logger; import org.jboss.ws.WSException; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.config.WSClientConfig; import org.jboss.ws.metadata.config.WSConfig; import org.jboss.ws.metadata.config.WSConfigFactory; @@ -53,9 +54,9 @@ // The REQUIRED config private WSClientConfig clientConfig; - public ClientEndpointMetaData(ServiceMetaData service, QName qname) + public ClientEndpointMetaData(ServiceMetaData service, QName qname, Type type) { - super(service, qname); + super(service, qname, type); } public void setConfigName(String configName) @@ -168,6 +169,7 @@ { StringBuilder buffer = new StringBuilder("\nClientEndpointMetaData:"); buffer.append("\n qname=" + getQName()); + buffer.append("\n type=" + getType()); buffer.append("\n address=" + getEndpointAddress()); buffer.append("\n seiName=" + getServiceEndpointInterfaceName()); buffer.append("\n configFile=" + getConfigFile()); Modified: trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java =================================================================== --- trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java 2006-07-05 14:34:18 UTC (rev 566) @@ -60,6 +60,11 @@ // provide logging private static Logger log = Logger.getLogger(EndpointMetaData.class); + public enum Type + { + JAXRPC, JAXWS + } + // The parent meta data. private ServiceMetaData service; @@ -88,16 +93,17 @@ // The JAXWS ServiceMode private Mode serviceMode; // Whether the endpoint was deployed from annotations - private boolean annotated = false; + private Type type; // The list of service meta data private List<OperationMetaData> operations = new ArrayList<OperationMetaData>(); // The optional handlers private List<UnifiedHandlerMetaData> jaxrpcHandlers = new ArrayList<UnifiedHandlerMetaData>(); - public EndpointMetaData(ServiceMetaData service, QName qname) + public EndpointMetaData(ServiceMetaData service, QName qname, Type type) { this.service = service; this.qname = qname; + this.type = type; } public ServiceMetaData getServiceMetaData() @@ -249,16 +255,11 @@ this.serviceMode = serviceMode; } - public boolean isAnnotated() + public Type getType() { - return annotated; + return type; } - public void setAnnotated(boolean isAnnotated) - { - this.annotated = isAnnotated; - } - public String getAuthMethod() { return authMethod; @@ -352,6 +353,7 @@ if (aux.getJavaMethod().equals(method)) { opMetaData = aux; + break; } } return opMetaData; @@ -406,7 +408,7 @@ } else { - if (isAnnotated()) + if (getType() == Type.JAXWS) { typeMapping.register(javaType, xmlType, new JAXBSerializerFactory(), new JAXBDeserializerFactory()); } Modified: trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java =================================================================== --- trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java 2006-07-05 14:34:18 UTC (rev 566) @@ -37,6 +37,9 @@ import org.jboss.ws.jaxrpc.Style; import org.jboss.ws.jaxrpc.TypeMappingImpl; import org.jboss.ws.jaxrpc.Use; +import org.jboss.ws.jaxws.JAXBDeserializerFactory; +import org.jboss.ws.jaxws.JAXBSerializerFactory; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.utils.HolderUtils; import org.jboss.ws.utils.JavaUtils; import org.w3c.dom.Element; @@ -60,7 +63,7 @@ private QName responseName; private String javaName; private Method javaMethod; - private boolean oneWayOperation; + private boolean oneWay; private String soapAction; private List<ParameterMetaData> parameters = new ArrayList<ParameterMetaData>(); private List<FaultMetaData> faults = new ArrayList<FaultMetaData>(); @@ -70,7 +73,7 @@ { UnifiedMetaData umd = new UnifiedMetaData(); ServiceMetaData smd = new ServiceMetaData(umd, new QName("mock-service")); - ServerEndpointMetaData epmd = new ServerEndpointMetaData(smd, new QName("mock-endpoint")); + ServerEndpointMetaData epmd = new ServerEndpointMetaData(smd, new QName("mock-endpoint"), Type.JAXRPC); initOperationMetaData(epmd, qname, javaName); } @@ -140,7 +143,7 @@ { return getStyle() == Style.RPC && getUse() == Use.LITERAL; } - + public boolean isDocumentBare() { return getStyle() == Style.DOCUMENT && getParameterStyle() == ParameterStyle.BARE; @@ -174,36 +177,50 @@ { String methodName = method.getName(); Class[] methodTypes = method.getParameterTypes(); + Class returnType = method.getReturnType(); if (javaName.equals(methodName)) { log.trace("Found java method: " + method); // match document/literal/wrapped - if (isDocumentWrapped() && ParameterWrapping.matchRequestParameters(this, methodTypes)) + if (isDocumentWrapped()) { - log.debug("Found wrapped java method: " + method); - javaMethod = method; - break; + if (ParameterWrapping.matchRequestParameters(this, methodTypes) && ParameterWrapping.matchResponseParameters(this, returnType)) + { + log.debug("Found wrapped java method: " + method); + javaMethod = method; + break; + } } - - // compare params by java type name - if (compareMethodParams(methodTypes, true)) + else { - log.debug("Found best matching java method: " + method); - javaMethod = method; - break; - } + // Match the return parameter + ParameterMetaData returnMetaData = getReturnParameter(); + if (returnMetaData != null) + { + if (!matchParameter(returnMetaData, returnType, true) && !matchParameter(returnMetaData, returnType, false)) + { + log.debug("Unmatched return meta data: " + returnType); + continue; + } + } - // compare params by assignability - if (compareMethodParams(methodTypes, false)) - { - if (javaMethod != null) - throw new WSException("Umbiguous javaMethod: " + method); + // compare params by java type name + if (compareMethodParams(methodTypes, true)) + { + log.debug("Found best matching java method: " + method); + javaMethod = method; + break; + } - log.debug("Found possible matching java method: " + method); - javaMethod = method; - break; + // compare params by assignability + else if (compareMethodParams(methodTypes, false)) + { + log.debug("Found possible matching java method: " + method); + javaMethod = method; + break; + } } } } @@ -248,67 +265,75 @@ if (pass == false) log.trace("Unmatched parameter count: " + parameters.size() + "!=" + methodParams.length); - TypeMappingImpl typeMapping = epMetaData.getServiceMetaData().getTypeMapping(); for (int i = 0; pass && i < methodParams.length; i++) { ParameterMetaData paramMetaData = parameters.get(i); - QName xmlType = paramMetaData.getXmlType(); - String javaType = paramMetaData.getJavaTypeName(); - Class methodParam = methodParams[i]; + pass = matchParameter(paramMetaData, methodParams[i], matchByTypeName); + } + return pass; + } - if (paramMetaData.getMode() != ParameterMode.IN) + private boolean matchParameter(ParameterMetaData paramMetaData, Class methodParam, boolean matchByTypeName) + { + QName xmlType = paramMetaData.getXmlType(); + String javaType = paramMetaData.getJavaTypeName(); + + boolean pass; + if (paramMetaData.getMode() != ParameterMode.IN) + { + if (HolderUtils.isHolderType(methodParam)) { - if (HolderUtils.isHolderType(methodParam)) - { - methodParam = HolderUtils.getValueType(methodParam); - } - else - { - pass = false; - break; - } + methodParam = HolderUtils.getValueType(methodParam); } - - // In case the parameter java type has not been initialized - // This happens when the UMDM is build from WSDL only (i.e. JAXWS Service) - if (javaType == null) + } + + TypeMappingImpl typeMapping = epMetaData.getServiceMetaData().getTypeMapping(); + + // In case the parameter java type has not been initialized + // This happens when the UMDM is build from WSDL only (i.e. JAXWS Service) + if (javaType == null) + { + javaType = methodParam.getName(); + paramMetaData.setJavaTypeName(javaType); + log.debug("Set parameter java type from method param: " + javaType); + + if (epMetaData.getType() == Type.JAXWS) { - javaType = methodParam.getName(); - paramMetaData.setJavaTypeName(javaType); - log.debug("Set parameter java type from method param: " + javaType); + typeMapping.register(methodParam, xmlType, new JAXBSerializerFactory(), new JAXBDeserializerFactory()); } + } - if (matchByTypeName) + if (matchByTypeName) + { + pass = methodParam.getName().equals(javaType); + } + else + { + String paramTypeName = methodParam.getName(); + Class paramType = paramMetaData.getJavaType(); + pass = JavaUtils.isAssignableFrom(methodParam, paramType); + + if (pass == false && typeMapping.isRegistered(methodParam, xmlType)) { - pass = methodParam.getName().equals(javaType); + log.debug("Adjust parameter type from " + paramType.getName() + " to " + paramTypeName); + paramMetaData.setJavaTypeName(paramTypeName); + pass = true; } - else - { - String paramTypeName = methodParam.getName(); - Class paramType = paramMetaData.getJavaType(); - pass = JavaUtils.isAssignableFrom(methodParam, paramType); - if (pass == false && typeMapping.isRegistered(methodParam, xmlType)) - { - log.debug("Adjust parameter type from " + paramType.getName() + " to " + paramTypeName); - paramMetaData.setJavaTypeName(paramTypeName); - pass = true; - } - } + } - String name = (matchByTypeName) ? paramMetaData.getJavaTypeName() : paramMetaData.getJavaType().getName(); - log.trace((pass ? "Matched" : "Unmatched") + " parameter: " + name + " == " + methodParam.getName()); - } + String name = (matchByTypeName) ? paramMetaData.getJavaTypeName() : paramMetaData.getJavaType().getName(); + log.trace((pass ? "Matched" : "Unmatched") + " parameter: " + name + " == " + methodParam.getName()); return pass; } public boolean isOneWayOperation() { - return oneWayOperation; + return oneWay; } public void setOneWayOperation(boolean oneWayOperation) { - this.oneWayOperation = oneWayOperation; + this.oneWay = oneWayOperation; assertOneWayOperation(); } @@ -440,7 +465,7 @@ // INOUT or OUT parameters. private void assertOneWayOperation() { - if (oneWayOperation) + if (oneWay) { if (returnParam != null) throw new WSException("OneWay operations cannot have a return parameter"); @@ -475,11 +500,12 @@ out++; } - if (returnParam != null && ! returnParam.isInHeader()) + if (returnParam != null && !returnParam.isInHeader()) out++; - if (! ((oneWayOperation && in == 1 && out == 0) || (in == 1 && out == 1))) - throw new WSException("The body of a documnet/literal bare message requires only 1 input and only 1 output (or 0 if oneway). method: " + javaName + " in: " + in + " out: " + out); + if (!((oneWay && in == 1 && out == 0) || (in == 1 && out == 1))) + throw new WSException("The body of a documnet/literal bare message requires only 1 input and only 1 output (or 0 if oneway). method: " + javaName + " in: " + + in + " out: " + out); } } @@ -503,8 +529,10 @@ StringBuilder buffer = new StringBuilder("\nOperationMetaData:"); buffer.append("\n qname=" + qname); buffer.append("\n javaName=" + javaName); - buffer.append("\n style=" + getStyle() + "/" + getUse() + (getStyle() == Style.DOCUMENT ? "/" + getParameterStyle() : "")); - buffer.append("\n oneWay=" + oneWayOperation); + buffer.append("\n style=" + getStyle() + "/" + getUse()); + if (getStyle() == Style.DOCUMENT) + buffer.append("/" + getParameterStyle()); + buffer.append("\n oneWay=" + oneWay); buffer.append("\n soapAction=" + soapAction); for (ParameterMetaData param : parameters) { Modified: trunk/src/main/java/org/jboss/ws/metadata/ServerEndpointMetaData.java =================================================================== --- trunk/src/main/java/org/jboss/ws/metadata/ServerEndpointMetaData.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/metadata/ServerEndpointMetaData.java 2006-07-05 14:34:18 UTC (rev 566) @@ -34,6 +34,7 @@ import org.jboss.logging.Logger; import org.jboss.ws.WSException; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.ws.metadata.config.WSConfig; import org.jboss.ws.metadata.config.WSConfigFactory; import org.jboss.ws.metadata.config.WSEndpointConfig; @@ -76,9 +77,9 @@ // The bean that registers with the ServiceEndpointManager private String managedEndpointBean = ServiceEndpoint.class.getName(); - public ServerEndpointMetaData(ServiceMetaData service, QName qname) + public ServerEndpointMetaData(ServiceMetaData service, QName qname, Type type) { - super(service, qname); + super(service, qname, type); } public void setConfigName(String configName) @@ -260,13 +261,13 @@ { StringBuilder buffer = new StringBuilder("\nServerEndpointMetaData:"); buffer.append("\n qname=" + getQName()); + buffer.append("\n type=" + getType()); buffer.append("\n id=" + getServiceEndpointID().getCanonicalName()); buffer.append("\n address=" + getEndpointAddress()); buffer.append("\n linkName=" + getLinkName()); buffer.append("\n implName=" + getServiceEndpointImplName()); buffer.append("\n seiName=" + getServiceEndpointInterfaceName()); buffer.append("\n serviceMode=" + getServiceMode()); - buffer.append("\n annotated=" + isAnnotated()); buffer.append("\n portComponentName=" + getPortComponentName()); buffer.append("\n contextRoot=" + getContextRoot()); buffer.append("\n urlPattern=" + getURLPattern()); Modified: trunk/src/main/java/org/jboss/ws/soap/SOAPMessageContextImpl.java =================================================================== --- trunk/src/main/java/org/jboss/ws/soap/SOAPMessageContextImpl.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/soap/SOAPMessageContextImpl.java 2006-07-05 14:34:18 UTC (rev 566) @@ -35,6 +35,7 @@ import org.jboss.ws.metadata.EndpointMetaData; import org.jboss.ws.metadata.OperationMetaData; import org.jboss.ws.metadata.ServiceMetaData; +import org.jboss.ws.metadata.EndpointMetaData.Type; import org.jboss.xb.binding.NamespaceRegistry; /** @@ -125,7 +126,7 @@ EndpointMetaData epMetaData = getEndpointMetaData(); ServiceMetaData serviceMetaData = epMetaData.getServiceMetaData(); - if (epMetaData.isAnnotated()) + if (epMetaData.getType() == Type.JAXWS) { JAXWSSerializationContext jaxwsContext = new JAXWSSerializationContext(); jaxwsContext.setTypeMapping(serviceMetaData.getTypeMapping()); Modified: trunk/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java =================================================================== --- trunk/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/tools/metadata/ToolsEndpointMetaData.java 2006-07-05 14:34:18 UTC (rev 566) @@ -21,9 +21,10 @@ */ package org.jboss.ws.tools.metadata; +// $Id$ + import javax.xml.namespace.QName; -import org.jboss.ws.Constants; import org.jboss.ws.metadata.EndpointMetaData; import org.jboss.ws.metadata.ServiceMetaData; @@ -37,6 +38,6 @@ public String typeNamespace; public ToolsEndpointMetaData(ServiceMetaData service, QName name) { - super(service, name); + super(service, name, Type.JAXRPC); } } \ No newline at end of file Modified: trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java =================================================================== --- trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java 2006-07-05 14:34:18 UTC (rev 566) @@ -27,7 +27,6 @@ import java.util.HashMap; import org.jboss.logging.Logger; -import org.jboss.ws.metadata.wsdl.WSDLUtils; /** Java utilities * Modified: trunk/src/test/java/org/jboss/test/ws/jbws871/JBWS871TestCase.java =================================================================== --- trunk/src/test/java/org/jboss/test/ws/jbws871/JBWS871TestCase.java 2006-07-05 12:17:59 UTC (rev 565) +++ trunk/src/test/java/org/jboss/test/ws/jbws871/JBWS871TestCase.java 2006-07-05 14:34:18 UTC (rev 566) @@ -21,10 +21,18 @@ */ package org.jboss.test.ws.jbws871; +import java.io.ByteArrayInputStream; import java.io.File; +import java.io.StringWriter; import java.net.URL; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; import javax.xml.namespace.QName; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; import javax.xml.ws.Service; import junit.framework.Test; @@ -62,6 +70,86 @@ } } + public void testNullArray() throws Exception + { + Integer[] intArr = null; + + JAXBContext jbc = JAXBContext.newInstance(Integer[].class); + Marshaller m = jbc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FRAGMENT, true); + StringWriter strw = new StringWriter(); + m.marshal(new JAXBElement(new QName("myarr"), Integer[].class, intArr), strw); + + String xmlFragment = strw.toString(); + // <myarr xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> + // System.out.println(xmlFragment); + + Unmarshaller um = jbc.createUnmarshaller(); + Source source = new StreamSource(new ByteArrayInputStream(xmlFragment.getBytes())); + JAXBElement jbel = um.unmarshal(source, Integer[].class); + assertNull("Null value expected", jbel.getValue()); + } + + public void testEmptyArray() throws Exception + { + Integer[] intArr = new Integer[0]; + + JAXBContext jbc = JAXBContext.newInstance(Integer[].class); + Marshaller m = jbc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FRAGMENT, true); + StringWriter strw = new StringWriter(); + m.marshal(new JAXBElement(new QName("myarr"), Integer[].class, intArr), strw); + + String xmlFragment = strw.toString(); + // <myarr/> + // System.out.println(xmlFragment); + + Unmarshaller um = jbc.createUnmarshaller(); + Source source = new StreamSource(new ByteArrayInputStream(xmlFragment.getBytes())); + JAXBElement jbel = um.unmarshal(source, Integer[].class); + assertEquals(intArr, jbel.getValue()); + } + + public void testSingleValueArray() throws Exception + { + Integer[] intArr = new Integer[] { new Integer(1) }; + + JAXBContext jbc = JAXBContext.newInstance(Integer[].class); + Marshaller m = jbc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FRAGMENT, true); + StringWriter strw = new StringWriter(); + m.marshal(new JAXBElement(new QName("myarr"), Integer[].class, intArr), strw); + + String xmlFragment = strw.toString(); + // <myarr><item>1</item></myarr> + // System.out.println(xmlFragment); + + Unmarshaller um = jbc.createUnmarshaller(); + Source source = new StreamSource(new ByteArrayInputStream(xmlFragment.getBytes())); + JAXBElement jbel = um.unmarshal(source, Integer[].class); + assertEquals(intArr, jbel.getValue()); + } + + public void testMultipleValueArray() throws Exception + { + Integer[] intArr = new Integer[] { new Integer(1), new Integer(2), new Integer(3) }; + + JAXBContext jbc = JAXBContext.newInstance(Integer[].class); + Marshaller m = jbc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FRAGMENT, true); + StringWriter strw = new StringWriter(); + m.marshal(new JAXBElement(new QName("myarr"), Integer[].class, intArr), strw); + + String xmlFragment = strw.toString(); + // <myarr><item>1</item><item>2</item><item>3</item></myarr> + // System.out.println(xmlFragment); + + Unmarshaller um = jbc.createUnmarshaller(); + Source source = new StreamSource(new ByteArrayInputStream(xmlFragment.getBytes())); + JAXBElement jbel = um.unmarshal(source, Integer[].class); + assertEquals(intArr, jbel.getValue()); + } + public void testEchoNullArray() throws Exception { Integer[] outArr = endpoint.intArr("null", null); |