Author: sagara Date: Mon Mar 19 05:16:49 2012 New Revision: 1302273 URL: http://svn.apache.org/viewvc?rev=1302273&view=rev Log: Fixed AXIS2-4253 Identify WSDL version based on the DOM root element and delegate to WSDL11ToAxisServiceBuilder and WSDL20ToAxisServiceBuilder accordingly .
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisService.java axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL20ToAxisServiceBuilder.java Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisService.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisService.java?rev=1302273&r1=1302272&r2=1302273&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisService.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/AxisService.java Mon Mar 19 05:16:49 2012 @@ -47,6 +47,8 @@ import org.apache.axis2.wsdl.WSDLConstan import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.neethi.Policy; +import org.apache.woden.WSDLSource; +import org.apache.woden.wsdl20.Description; import org.apache.ws.commons.schema.XmlSchema; import org.apache.ws.commons.schema.XmlSchemaElement; import org.apache.ws.commons.schema.XmlSchemaExternal; @@ -70,6 +72,7 @@ import javax.xml.parsers.ParserConfigura import java.io.*; import java.lang.reflect.Method; import java.net.SocketException; +import java.net.URISyntaxException; import java.net.URL; import java.security.PrivilegedAction; import java.util.*; @@ -2324,19 +2327,31 @@ public class AxisService extends AxisDes public static AxisService createClientSideAxisService(URL wsdlURL, QName wsdlServiceName, String portName, Options options) throws AxisFault { - try { - InputStream in = wsdlURL.openConnection().getInputStream(); - Document doc = XMLUtils.newDocument(in); - WSDLReader reader = WSDLFactory.newInstance().newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - Definition wsdlDefinition = reader.readWSDL(getBaseURI(wsdlURL - .toString()), doc); - if (wsdlDefinition != null) { - wsdlDefinition.setDocumentBaseURI(getDocumentURI(wsdlURL - .toString())); - } - return createClientSideAxisService(wsdlDefinition, wsdlServiceName, - portName, options); + try { + InputStream in = wsdlURL.openConnection().getInputStream(); + Document doc = XMLUtils.newDocument(in); + String namespaceURI = doc.getDocumentElement().getNamespaceURI(); + if (Constants.NS_URI_WSDL11.equals(namespaceURI)) { + WSDLReader reader = WSDLFactory.newInstance().newWSDLReader(); + reader.setFeature("javax.wsdl.importDocuments", true); + Definition wsdlDefinition = reader.readWSDL(getBaseURI(wsdlURL.toString()), doc); + if (wsdlDefinition != null) { + wsdlDefinition.setDocumentBaseURI(getDocumentURI(wsdlURL.toString())); + } + return createClientSideAxisService(wsdlDefinition, wsdlServiceName, portName, + options); + } else if (Constants.NS_URI_WSDL20.equals(namespaceURI)) { + org.apache.woden.WSDLReader reader = org.apache.woden.WSDLFactory.newInstance() + .newWSDLReader(); + WSDLSource source = reader.createWSDLSource(); + source.setSource(doc); + source.setBaseURI(wsdlURL.toURI()); + Description description = reader.readWSDL(source); + return createClientSideAxisService(description, wsdlServiceName, portName, options); + } else { + throw new AxisFault("No namespace found : Invalid WSDL"); + } + } catch (IOException e) { log.error(e.getMessage(), e); throw AxisFault.makeFault(e); @@ -2349,7 +2364,13 @@ public class AxisService extends AxisDes } catch (WSDLException e) { log.error(e.getMessage(), e); throw AxisFault.makeFault(e); - } + } catch (org.apache.woden.WSDLException e) { + log.error(e.getMessage(), e); + throw AxisFault.makeFault(e); + } catch (URISyntaxException e) { + log.error(e.getMessage(), e); + throw AxisFault.makeFault(e); + } } private static String getBaseURI(String currentURI) { @@ -3343,4 +3364,31 @@ public class AxisService extends AxisDes messageContextListeners.get(i).attachEnvelopeEvent(mc); } } + + /** + * returns a axisService given a input Stream of WSDL2.0 document. + * + * @param Description + * WSDL description + * @param wsdlServiceName + * @param endPoint + * @param options + * @return + * @throws AxisFault + */ + public static AxisService createClientSideAxisService(Description description, + QName wsdlServiceName, String endPoint, Options options) throws AxisFault { + WSDL20ToAxisServiceBuilder serviceBuilder = new WSDL20ToAxisServiceBuilder(description, + wsdlServiceName, endPoint); + serviceBuilder.setServerSide(false); + AxisService axisService = serviceBuilder.populateService(); + AxisEndpoint axisEndpoint = (AxisEndpoint) axisService.getEndpoint(axisService + .getEndpointName()); + if (axisEndpoint != null) { + options.setTo(new EndpointReference(axisEndpoint.getEndpointURL())); + options.setSoapVersionURI((String) axisEndpoint.getBinding().getProperty( + WSDL2Constants.ATTR_WSOAP_VERSION)); + } + return axisService; + } } Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL20ToAxisServiceBuilder.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL20ToAxisServiceBuilder.java?rev=1302273&r1=1302272&r2=1302273&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL20ToAxisServiceBuilder.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/WSDL20ToAxisServiceBuilder.java Mon Mar 19 05:16:49 2012 @@ -188,7 +188,22 @@ public class WSDL20ToAxisServiceBuilder this.wsdlURI = wsdlUri; } - public boolean isAllPorts() { + public WSDL20ToAxisServiceBuilder(Description descriptionComp, QName wsdlServiceName, + String interfaceName) { + DescriptionElement descriptionElement = descriptionComp.toElement(); + savedTargetNamespace = descriptionElement.getTargetNamespace().toString(); + namespacemap = descriptionElement.getDeclaredNamespaces(); + this.description = descriptionElement.toComponent(); + this.serviceName = null; + if (wsdlServiceName != null) { + serviceName = wsdlServiceName; + } + this.interfaceName = interfaceName; + this.axisService = new AxisService(); + setPolicyRegistryFromService(axisService); + } + + public boolean isAllPorts() { return isAllPorts; }