|
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);
|