Author: dims Date: Fri Aug 21 13:27:22 2009 New Revision: 806543 URL: http://svn.apache.org/viewvc?rev=806543&view=rev Log: Fix for the following stack trace:
java.lang.IllegalStateException: The prefix xs is not bound. at org.apache.ws.commons.schema.SchemaBuilder.getRefQName(SchemaBuilder.java:671) at org.apache.ws.commons.schema.SchemaBuilder.getRefQName(SchemaBuilder.java:644) at org.apache.ws.commons.schema.SchemaBuilder.handleElement(SchemaBuilder.java:1487) at org.apache.ws.commons.schema.SchemaBuilder.handleSequence(SchemaBuilder.java:1045) at org.apache.ws.commons.schema.SchemaBuilder.handleComplexType(SchemaBuilder.java:739) at org.apache.ws.commons.schema.SchemaBuilder.handleElement(SchemaBuilder.java:1514) at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:291) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:412) at org.apache.axis2.description.WSDLToAxisServiceBuilder.getXMLSchema(WSDLToAxisServiceBuilder.java:144) at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.copyExtensibleElements(WSDL11ToAxisServiceBuilder.java:2317) at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:413) at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:430) at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:402) at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:346) at org.apache.axis2.jaxws.description.impl.EndpointDescriptionImpl.buildAxisServiceFromWSDL(EndpointDescription In Axis2's WSDL11ToAxisBuilder.java, there is code that converts from multiple message parts like so <wsdl:message name="testMultipleSwAResponseMsg"> <wsdl:part name="testOutputSwA" type="bons1:TestBO"/> <wsdl:part name="swaOutput1" type="xsd:hexBinary"/> <wsdl:part name="swaOutput2" type="xsd:hexBinary"/> <wsdl:part name="swaOutput3" type="xsd:base64Binary"/> </wsdl:message> into XML Schema based ComplexType(s). Basically a new ComplexType is created with a XMLSchema sequence inside which you would see all the 4 parts. During this processing there is a code path where we lose fact that xsd prefix is mapped to xml schema namespace and it ends up using a xs as the prefix instead of xsd and the subsequent issue with xs prefix not found. This happens bec ause the complex type is created in the top level wsdl which has no declaration for xmlns:xsd or xmlns:xs Modified: webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/utils/PrefixCollector.java Modified: webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/utils/PrefixCollector.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/utils/PrefixCollector.java?rev=806543&r1=806542&r2=806543&view=diff ============================================================================== --- webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/utils/PrefixCollector.java (original) +++ webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/utils/PrefixCollector.java Fri Aug 21 13:27:22 2009 @@ -39,9 +39,10 @@ * declarations are ignored. */ public void searchLocalPrefixDeclarations(Node pNode) { - if (pNode.getNodeType() == Node.ELEMENT_NODE) { + short type = pNode.getNodeType(); + if (type == Node.ELEMENT_NODE || type == Node.DOCUMENT_NODE) { NamedNodeMap map = pNode.getAttributes(); - for (int i = 0; i < map.getLength(); i++) { + for (int i = 0; map != null && i < map.getLength(); i++) { Node attr = map.item(i); final String uri = attr.getNamespaceURI(); if (Constants.XMLNS_ATTRIBUTE_NS_URI.equals(uri)) {