Author: jason.greene(a)jboss.com
Date: 2007-01-15 23:10:04 -0500 (Mon, 15 Jan 2007)
New Revision: 1977
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java
trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
Log:
Fix JBWS-1384 (Fix document/literal wrapped attachment parameters)
Also mark "message style" as deprecated
Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java 2007-01-16
04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/core/EndpointInvocation.java 2007-01-16
04:10:04 UTC (rev 1977)
@@ -258,7 +258,7 @@
Class javaType = paramMetaData.getJavaType();
Object value;
- if (opMetaData.isDocumentWrapped() && paramMetaData.isInHeader() ==
false)
+ if (opMetaData.isDocumentWrapped() && !paramMetaData.isInHeader()
&& !paramMetaData.isSwA())
{
value = ParameterWrapping.wrapRequestParameters(paramMetaData, inputParams);
}
@@ -300,7 +300,7 @@
Method method = opMetaData.getJavaMethod();
Class[] targetParameterTypes = method.getParameterTypes();
- if (opMetaData.isDocumentWrapped() && paramMetaData.isInHeader() == false
&& paramMetaData.isMessageType() == false)
+ if (opMetaData.isDocumentWrapped() && !paramMetaData.isInHeader()&&
!paramMetaData.isSwA() && !paramMetaData.isMessageType())
{
outParameters = ParameterWrapping.unwrapRequestParameters(paramMetaData,
paramValue, payload);
syncOutWrappedParameters(targetParameterTypes);
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java 2007-01-16
04:03:22 UTC (rev 1976)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/builder/jaxrpc/JAXRPCMetaDataBuilder.java 2007-01-16
04:10:04 UTC (rev 1977)
@@ -386,21 +386,15 @@
if (pmd != null)
pmd.setInHeader(true);
}
-
- // we don't support swa binding parameters in document style
- //
http://jira.jboss.org/jira/browse/JBWS-1384
- if (opMetaData.getStyle() == Style.RPC)
+ for (WSDLMIMEPart mimePart : bindingInput.getMimeParts())
{
- for (WSDLMIMEPart mimePart : bindingInput.getMimeParts())
- {
- String partName = mimePart.getPartName();
- QName xmlName = new QName(partName);
- QName xmlType = mimePart.getXmlType();
+ String partName = mimePart.getPartName();
+ QName xmlName = new QName(partName);
+ QName xmlType = mimePart.getXmlType();
- ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation,
seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++, false);
- pmd.setSwA(true);
- pmd.setMimeTypes(mimePart.getMimeTypes());
- }
+ ParameterMetaData pmd = buildInputParameter(opMetaData, wsdlOperation,
seiMethodMapping, typeMapping, partName, xmlName, xmlType, wsdlPosition++, false);
+ pmd.setSwA(true);
+ pmd.setMimeTypes(mimePart.getMimeTypes());
}
return wsdlPosition;
@@ -596,9 +590,10 @@
}
}
- private int processDocElement(OperationMetaData operation, WSDLInterfaceOperation
wsdlOperation, ServiceEndpointMethodMapping seiMethodMapping, TypeMappingImpl typeMapping,
List<WrappedParameter> wrappedParameters, List<WrappedParameter>
wrappedResponseParameters)
+ private int processDocElement(OperationMetaData operation, WSDLInterfaceOperation
wsdlOperation, WSDLBindingOperation bindingOperation, ServiceEndpointMethodMapping
seiMethodMapping, TypeMappingImpl typeMapping, List<WrappedParameter>
wrappedParameters, List<WrappedParameter> wrappedResponseParameters)
{
WSDLInterfaceOperationInput input = wsdlOperation.getInputs()[0];
+ WSDLBindingOperationInput bindingInput = bindingOperation.getInputs()[0];
int wsdlPosition;
QName xmlName = input.getElement();
@@ -644,6 +639,11 @@
throw new IllegalArgumentException("wsdl-message-message mapping
required for document/literal wrapped");
String elementName = wsdlMessageMapping.getWsdlMessagePartName();
+
+ // Skip attachments
+ if (bindingInput.getMimePart(elementName) != null)
+ continue;
+
String variable = variableMap.get(elementName);
if (variable == null)
throw new IllegalArgumentException("Could not determine variable name
for element: " + elementName);
@@ -863,7 +863,7 @@
// WS-I BP 1.0 allows document/literal bare to have zero message parts
if (wsdlOperation.getInputs().length > 0)
{
- wsdlPosition = processDocElement(opMetaData, wsdlOperation, seiMethodMapping,
typeMapping, wrappedParameters, wrappedResponseParameters);
+ wsdlPosition = processDocElement(opMetaData, wsdlOperation, bindingOperation,
seiMethodMapping, typeMapping, wrappedParameters, wrappedResponseParameters);
wsdlPosition = processBindingParameters(opMetaData, wsdlOperation,
seiMethodMapping, typeMapping, bindingOperation, wsdlPosition);
}
else
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java 2007-01-16
04:03:22 UTC (rev 1976)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/umdm/ParameterMetaData.java 2007-01-16
04:10:04 UTC (rev 1977)
@@ -132,6 +132,9 @@
Type valueType = (holder ? HolderUtils.getValueType(actualType) : actualType);
Class valueClass = JavaUtils.erasure(valueType);
+ // FIXME - Why do we need this hack? It shouldn't be needed. The method
+ // signature should _ALWAYS_ match, else we will get ambiguous or
+ // incorrect results
List<Class> anyTypes = new ArrayList<Class>();
anyTypes.add(javax.xml.soap.SOAPElement.class);
anyTypes.add(org.w3c.dom.Element.class);
@@ -312,11 +315,15 @@
this.soapArrayCompType = xmlType;
}
+
+ @Deprecated
+ // FIXME This hack should be removed
public boolean isMessageType()
{
return messageTypes.contains(javaTypeName);
}
+ @Deprecated
public static boolean isMessageType(String javaTypeName)
{
return messageTypes.contains(javaTypeName);
@@ -384,7 +391,8 @@
// reset java type
javaType = null;
- if (getOperationMetaData().isDocumentWrapped() && !isInHeader() &&
!isMessageType())
+ // FIXME - Remove messageType hack
+ if (getOperationMetaData().isDocumentWrapped() && !isInHeader() &&
!isSwA() && !isMessageType())
{
new DynamicWrapperGenerator(getClassLoader()).generate(this);
Modified:
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java
===================================================================
---
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java 2007-01-16
04:03:22 UTC (rev 1976)
+++
trunk/jbossws-core/src/main/java/org/jboss/ws/metadata/wsdl/WSDLBindingMessageReference.java 2007-01-16
04:10:04 UTC (rev 1977)
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
/**
@@ -39,7 +40,7 @@
private WSDLBindingOperation wsdlBindingOperation;
private NCName messageLabel;
private List<WSDLSOAPHeader> soapHeaders = new
ArrayList<WSDLSOAPHeader>();
- private List<WSDLMIMEPart> mimeParts = new ArrayList<WSDLMIMEPart>();
+ private LinkedHashMap<String, WSDLMIMEPart> mimeParts = new
LinkedHashMap<String, WSDLMIMEPart>();
public WSDLBindingMessageReference(WSDLBindingOperation wsdlBindingOperation)
{
@@ -111,7 +112,7 @@
*/
public void addMimePart(WSDLMIMEPart mimePart)
{
- this.mimeParts.add(mimePart);
+ this.mimeParts.put(mimePart.getPartName(), mimePart);
}
/**
@@ -121,6 +122,17 @@
*/
public Collection<WSDLMIMEPart> getMimeParts()
{
- return mimeParts;
+ return mimeParts.values();
}
+
+ /**
+ * Gets a specific MIME part
+ *
+ * @param partName the wsdl part name
+ * @return
+ */
+ public WSDLMIMEPart getMimePart(String partName)
+ {
+ return mimeParts.get(partName);
+ }
}
\ No newline at end of file
Modified: trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
===================================================================
--- trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java 2007-01-16
04:03:22 UTC (rev 1976)
+++ trunk/jbossws-core/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java 2007-01-16
04:10:04 UTC (rev 1977)
@@ -126,7 +126,7 @@
// Temporary files used by this reader.
private List<File> tempFiles = new ArrayList<File>();
- // SWA handling
+ // SWA handling
private Map<QName, List<String>> skippedSWAParts = new HashMap<QName,
List<String>>();
/**
@@ -536,7 +536,8 @@
for (Part srcPart : (List<Part>)srcMessage.getOrderedParts(paramOrder))
{
// Skip SWA attachment parts
- if( ignorePart(srcPortType, srcPart) ) continue;
+ if (ignorePart(srcPortType, srcPart))
+ continue;
if (Constants.URI_STYLE_DOCUMENT == destOperation.getStyle())
{
@@ -742,7 +743,7 @@
String style = destOperation.getStyle();
if (Constants.URI_STYLE_RPC.equals(style))
{
- // R2203 An rpc-literal binding in a DESCRIPTION MUST refer, in its
soapbind:body element(s),
+ // R2203 An rpc-literal binding in a DESCRIPTION MUST refer, in its
soapbind:body element(s),
// only to wsdl:part element(s) that have been defined using the type
attribute.
if (srcPart.getName() == null)
throw new WSDLException(WSDLException.INVALID_WSDL, "RPC style message
parts must define a typy name: " + srcMessage.getQName());
@@ -757,7 +758,7 @@
}
else
{
- // R2204 A document-literal binding in a DESCRIPTION MUST refer, in each of its
soapbind:body element(s),
+ // R2204 A document-literal binding in a DESCRIPTION MUST refer, in each of its
soapbind:body element(s),
// only to wsdl:part element(s) that have been defined using the element
attribute
// [hb] do this only for non swa porttypes
if (srcPart.getElementName() == null)
@@ -1087,7 +1088,7 @@
public void removeReference(QName element)
{
WSDLInterfaceOperationInput destIntfInput =
destIntfOperation.getInput(element);
- if (destIntfInput == null)
+ if (destIntfInput != null)
destIntfOperation.removeInput(element);
}
@@ -1120,7 +1121,7 @@
public void removeReference(QName element)
{
WSDLInterfaceOperationOutput destIntfOutput =
destIntfOperation.getOutput(element);
- if (destIntfOutput == null)
+ if (destIntfOutput != null)
destIntfOperation.removeInput(element);
}
@@ -1217,7 +1218,6 @@
}
}
- // Found content types in this part
if (name != null)
{
QName xmlType = callback.getXmlType(name);