You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Tom Jordahl <to...@macromedia.com> on 2003/07/09 20:45:51 UTC
RE: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/symbolTabl
e SymbolTable.java
+ if(param.isInHeader()) {
+ QName qName = getBindedParameterName(operation.getBindingInput().getExtensibilityElements(), param);
+ param.setQName(qName);
+ } else if (param.isOutHeader()) {
+ QName qName = getBindedParameterName(operation.getBindingOutput().getExtensibilityElements(), param);
+ param.setQName(qName);
+ }
Isn't this if statement the same for both forks?
Should it be
if (param.isInHeader() || param.isOutHeader() ) {
Just wondering if I missed something...
--
Tom Jordahl
Macromedia Server Development
-----Original Message-----
From: dims@apache.org [mailto:dims@apache.org]
Sent: Wednesday, July 09, 2003 2:37 PM
To: xml-axis-cvs@apache.org
Subject: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/symbolTable SymbolTable.java
dims 2003/07/09 11:37:00
Modified: java/src/org/apache/axis/wsdl/symbolTable SymbolTable.java
Log:
Fix for Bug 20054 - Parameters namespaces not taken into account by WSDL2Java
Revision Changes Path
1.76 +92 -29 xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java
Index: SymbolTable.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- SymbolTable.java 22 Apr 2003 19:36:16 -0000 1.75
+++ SymbolTable.java 9 Jul 2003 18:36:59 -0000 1.76
@@ -94,6 +94,7 @@
import javax.wsdl.extensions.soap.SOAPHeader;
import javax.wsdl.extensions.soap.SOAPHeaderFault;
import javax.wsdl.extensions.UnknownExtensibilityElement;
+import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
@@ -1543,19 +1544,8 @@
new String[] {partName,
opName}));
}
- setMIMEInfo(param, bindingEntry == null ? null :
- bindingEntry.getMIMEInfo(opName, partName));
- if (bindingEntry != null &&
- bindingEntry.isInHeaderPart(opName, partName)) {
- param.setInHeader(true);
- }
- if (bindingEntry != null &&
- bindingEntry.isOutHeaderPart(opName, partName)) {
- param.setOutHeader(true);
- }
-
+ fillParamInfo(param, bindingEntry, opName, partName);
v.add(param);
-
continue; // next part
}
@@ -1636,14 +1626,7 @@
Parameter p = new Parameter();
p.setQName(elem.getName());
p.setType(elem.getType());
- setMIMEInfo(p, bindingEntry == null ? null :
- bindingEntry.getMIMEInfo(opName, partName));
- if (bindingEntry.isInHeaderPart(opName, partName)) {
- p.setInHeader(true);
- }
- if (bindingEntry.isOutHeaderPart(opName, partName)) {
- p.setOutHeader(true);
- }
+ fillParamInfo(p, bindingEntry, opName, partName);
v.add(p);
}
} else {
@@ -1657,20 +1640,100 @@
} else if (elementName != null) {
param.setType(getElement(elementName));
}
- setMIMEInfo(param, bindingEntry == null ? null :
- bindingEntry.getMIMEInfo(opName, partName));
- if (bindingEntry.isInHeaderPart(opName, partName)) {
- param.setInHeader(true);
- }
- if (bindingEntry.isOutHeaderPart(opName, partName)) {
- param.setOutHeader(true);
- }
-
+ fillParamInfo(param, bindingEntry, opName, partName);
v.add(param);
}
} // while
} // getParametersFromParts
+
+ private void fillParamInfo(Parameter param, BindingEntry bindingEntry, String opName, String partName) {
+ setMIMEInfo(param, bindingEntry == null ? null :
+ bindingEntry.getMIMEInfo(opName, partName));
+ boolean isHeader = false;
+ if (bindingEntry != null && bindingEntry.isInHeaderPart(opName, partName)) {
+ isHeader = true;
+ param.setInHeader(true);
+ }
+ if (bindingEntry != null && bindingEntry.isOutHeaderPart(opName, partName)) {
+ isHeader = true;
+ param.setOutHeader(true);
+ }
+
+ if(isHeader && bindingEntry.getBinding() != null) {
+ List list = bindingEntry.getBinding().getBindingOperations();
+ for(int i=0; list != null && i<list.size();i++){
+ BindingOperation operation = (BindingOperation)list.get(i);
+ if(operation.getName().equals(opName)) {
+ if(param.isInHeader()) {
+ QName qName = getBindedParameterName(operation.getBindingInput().getExtensibilityElements(), param);
+ param.setQName(qName);
+ } else if (param.isOutHeader()) {
+ QName qName = getBindedParameterName(operation.getBindingOutput().getExtensibilityElements(), param);
+ param.setQName(qName);
+ }
+ }
+ }
+ }
+ }
+
+ private QName getBindedParameterName(List elements, Parameter p) {
+ // If the parameter can either be in the message header or in the
+ // message body.
+ // When it is in the header, there may be a SOAPHeader (soap:header)
+ // with its part name. The namespace used is the one of the soap:header.
+ // When it is in the body, if there is a SOAPBody with its part name,
+ // the namespace used is the one of this soap:body.
+ //
+ // If the parameter is in the body and there is a soap:body with no parts,
+ // its namespace is used for the parameter.
+
+ QName paramName = null;
+ String defaultNamespace = null;
+ String parameterPartName = p.getName();
+ for (Iterator k = elements.iterator(); k.hasNext();) {
+ ExtensibilityElement element = (ExtensibilityElement) k.next();
+ if (element instanceof SOAPBody) {
+ SOAPBody bodyElement = (SOAPBody) element;
+ List parts = bodyElement.getParts();
+ if ((parts == null) || (parts.size() == 0)) {
+ defaultNamespace = bodyElement.getNamespaceURI();
+ } else {
+ boolean found = false;
+ for (Iterator l = parts.iterator(); l.hasNext();) {
+ Object o = l.next();
+ if(o instanceof Part) {
+ Part part = (Part) o;
+ if (parameterPartName.equals(part.getName())) {
+ paramName = new QName(bodyElement.getNamespaceURI(), parameterPartName);
+ found = true;
+ break;
+ }
+ }
+ }
+ if (found)
+ break;
+ }
+ } else if (element instanceof SOAPHeader) {
+ SOAPHeader headerElement = (SOAPHeader) element;
+ String part = headerElement.getPart();
+ if (parameterPartName.equals(part)) {
+ paramName = new QName(headerElement.getNamespaceURI(), parameterPartName);
+ break;
+ }
+ }
+ }
+
+ if ((paramName == null) && (!p.isInHeader()) && (!p.isOutHeader())) {
+ if (defaultNamespace != null) {
+ paramName = new QName(defaultNamespace, parameterPartName);
+ } else {
+ paramName = p.getQName();
+ }
+ }
+ return paramName;
+ }
+
/**
* Set the MIME type. This can be determine in one of two ways:
RE: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/symbolTabl e SymbolTable.java
Posted by Davanum Srinivas <di...@yahoo.com>.
Hey Tom,
Welcome Back (or are u just lurking?)
inHeader needs operation.getBindingInput() and outHeader needs operation.getBindingOutput :) :)
thanks,
dims
--- Tom Jordahl <to...@macromedia.com> wrote:
> + if(param.isInHeader()) {
> + QName qName =
> getBindedParameterName(operation.getBindingInput().getExtensibilityElements(), param);
> + param.setQName(qName);
> + } else if (param.isOutHeader()) {
> + QName qName =
> getBindedParameterName(operation.getBindingOutput().getExtensibilityElements(), param);
> + param.setQName(qName);
> + }
>
>
> Isn't this if statement the same for both forks?
> Should it be
> if (param.isInHeader() || param.isOutHeader() ) {
>
> Just wondering if I missed something...
>
> --
> Tom Jordahl
> Macromedia Server Development
>
> -----Original Message-----
> From: dims@apache.org [mailto:dims@apache.org]
> Sent: Wednesday, July 09, 2003 2:37 PM
> To: xml-axis-cvs@apache.org
> Subject: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/symbolTable SymbolTable.java
>
> dims 2003/07/09 11:37:00
>
> Modified: java/src/org/apache/axis/wsdl/symbolTable SymbolTable.java
> Log:
> Fix for Bug 20054 - Parameters namespaces not taken into account by WSDL2Java
>
> Revision Changes Path
> 1.76 +92 -29 xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java
>
> Index: SymbolTable.java
> ===================================================================
> RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java,v
> retrieving revision 1.75
> retrieving revision 1.76
> diff -u -r1.75 -r1.76
> --- SymbolTable.java 22 Apr 2003 19:36:16 -0000 1.75
> +++ SymbolTable.java 9 Jul 2003 18:36:59 -0000 1.76
> @@ -94,6 +94,7 @@
> import javax.wsdl.extensions.soap.SOAPHeader;
> import javax.wsdl.extensions.soap.SOAPHeaderFault;
> import javax.wsdl.extensions.UnknownExtensibilityElement;
> +import javax.wsdl.extensions.ExtensibilityElement;
> import javax.wsdl.factory.WSDLFactory;
> import javax.wsdl.xml.WSDLReader;
> import javax.xml.namespace.QName;
> @@ -1543,19 +1544,8 @@
> new String[] {partName,
> opName}));
> }
> - setMIMEInfo(param, bindingEntry == null ? null :
> - bindingEntry.getMIMEInfo(opName, partName));
> - if (bindingEntry != null &&
> - bindingEntry.isInHeaderPart(opName, partName)) {
> - param.setInHeader(true);
> - }
> - if (bindingEntry != null &&
> - bindingEntry.isOutHeaderPart(opName, partName)) {
> - param.setOutHeader(true);
> - }
> -
> + fillParamInfo(param, bindingEntry, opName, partName);
> v.add(param);
> -
> continue; // next part
> }
>
> @@ -1636,14 +1626,7 @@
> Parameter p = new Parameter();
> p.setQName(elem.getName());
> p.setType(elem.getType());
> - setMIMEInfo(p, bindingEntry == null ? null :
> - bindingEntry.getMIMEInfo(opName, partName));
> - if (bindingEntry.isInHeaderPart(opName, partName)) {
> - p.setInHeader(true);
> - }
> - if (bindingEntry.isOutHeaderPart(opName, partName)) {
> - p.setOutHeader(true);
> - }
> + fillParamInfo(p, bindingEntry, opName, partName);
> v.add(p);
> }
> } else {
> @@ -1657,20 +1640,100 @@
> } else if (elementName != null) {
> param.setType(getElement(elementName));
> }
> - setMIMEInfo(param, bindingEntry == null ? null :
> - bindingEntry.getMIMEInfo(opName, partName));
> - if (bindingEntry.isInHeaderPart(opName, partName)) {
> - param.setInHeader(true);
> - }
> - if (bindingEntry.isOutHeaderPart(opName, partName)) {
> - param.setOutHeader(true);
> - }
> -
> + fillParamInfo(param, bindingEntry, opName, partName);
> v.add(param);
> }
> } // while
>
> } // getParametersFromParts
> +
> + private void fillParamInfo(Parameter param, BindingEntry bindingEntry, String opName,
> String partName) {
> + setMIMEInfo(param, bindingEntry == null ? null :
> + bindingEntry.getMIMEInfo(opName, partName));
> + boolean isHeader = false;
> + if (bindingEntry != null && bindingEntry.isInHeaderPart(opName, partName)) {
> + isHeader = true;
> + param.setInHeader(true);
> + }
> + if (bindingEntry != null && bindingEntry.isOutHeaderPart(opName, partName)) {
> + isHeader = true;
> + param.setOutHeader(true);
> + }
> +
> + if(isHeader && bindingEntry.getBinding() != null) {
> + List list = bindingEntry.getBinding().getBindingOperations();
> + for(int i=0; list != null && i<list.size();i++){
> + BindingOperation operation = (BindingOperation)list.get(i);
> + if(operation.getName().equals(opName)) {
> + if(param.isInHeader()) {
> + QName qName =
> getBindedParameterName(operation.getBindingInput().getExtensibilityElements(), param);
> + param.setQName(qName);
> + } else if (param.isOutHeader()) {
> + QName qName =
> getBindedParameterName(operation.getBindingOutput().getExtensibilityElements(), param);
> + param.setQName(qName);
> + }
> + }
> + }
> + }
> + }
> +
> + private QName getBindedParameterName(List elements, Parameter p) {
> + // If the parameter can either be in the message header or in the
> + // message body.
> + // When it is in the header, there may be a SOAPHeader (soap:header)
> + // with its part name. The namespace used is the one of the soap:header.
> + // When it is in the body, if there is a SOAPBody with its part name,
> + // the namespace used is the one of this soap:body.
> + //
> + // If the parameter is in the body and there is a soap:body with no parts,
> + // its namespace is used for the parameter.
> +
> + QName paramName = null;
> + String defaultNamespace = null;
> + String parameterPartName = p.getName();
> + for (Iterator k = elements.iterator(); k.hasNext();) {
> + ExtensibilityElement element = (ExtensibilityElement) k.next();
> + if (element instanceof SOAPBody) {
> + SOAPBody bodyElement = (SOAPBody) element;
> + List parts = bodyElement.getParts();
> + if ((parts == null) || (parts.size() == 0)) {
> + defaultNamespace = bodyElement.getNamespaceURI();
> + } else {
> + boolean found = false;
> + for (Iterator l = parts.iterator(); l.hasNext();) {
> + Object o = l.next();
> + if(o instanceof Part) {
> + Part part = (Part) o;
> + if (parameterPartName.equals(part.getName())) {
> + paramName = new QName(bodyElement.getNamespaceURI(),
> parameterPartName);
> + found = true;
> + break;
> + }
> + }
> + }
> + if (found)
> + break;
> + }
> + } else if (element instanceof SOAPHeader) {
> + SOAPHeader headerElement = (SOAPHeader) element;
> + String part = headerElement.getPart();
> + if (parameterPartName.equals(part)) {
> + paramName = new QName(headerElement.getNamespaceURI(),
> parameterPartName);
> + break;
> + }
> + }
> + }
> +
> + if ((paramName == null) && (!p.isInHeader()) && (!p.isOutHeader())) {
> + if (defaultNamespace != null) {
> + paramName = new QName(defaultNamespace, parameterPartName);
> + } else {
> + paramName = p.getQName();
> + }
> + }
> + return paramName;
> + }
> +
>
=== message truncated ===
=====
Davanum Srinivas - http://webservices.apache.org/~dims/
__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com