[ https://issues.apache.org/jira/browse/ODE-241?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matthieu Riou resolved ODE-241. ------------------------------- Resolution: Fixed Assignee: Matthieu Riou Monkey patched WSDL11ToAxisServiceBuilder (which in Java means sub-classing and overriding whatever bothers you) in ODEAxisService to use the working XmlSchema read function instead of the broken one. > An xsd including another xsd throws a NPE on deployment > ------------------------------------------------------- > > Key: ODE-241 > URL: https://issues.apache.org/jira/browse/ODE-241 > Project: ODE > Issue Type: Bug > Components: Axis2 Integration > Affects Versions: 1.1.1 > Reporter: Matthieu Riou > Assignee: Matthieu Riou > Fix For: 1.2 > > > There's a ws-commons XmlSchema bug giving us some problems with some relative > XSD includes, the original stack is reproduced below. The situation is > basically: > WSDL -> XSD1 -> XSD2 > The baseUri we get from the SchemaBuilder to resolve XSD2 is wrong as it's > resolved relatively to the WSDL instead of XSD1. I wish it was simple to fix > but actually it's not as it's more of a design issue in XmlSchema. All > imports within a WSDL document (including transitive ones like we have here) > are associated to a single XmlSchemaCollection. And the baseUri used for all > resolving is the one of the collection. They should either have a collection > per document or associate a baseUri with the document instead of the > collection. > I filed a WS-COMMONS bug for this but as you can see they don't seem to get > the problem: https://issues.apache.org/jira/browse/WSCOMMONS-265 > 15:20:11,083 DEBUG [ODEAxisService] resolveEntity: > targetNamespace=http://www.agora.msa.fr/TarifMaladie > schemaLocation=../XSDSchema/MatricePriseEnCharge.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > DEBUG - GeronimoLog.debug(66) | resolveEntity: > targetNamespace=http://www.agora.msa.fr/TarifMaladie > schemaLocation=ListeProduit.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > 15:20:11,088 DEBUG [ODEAxisService] resolveEntity: > targetNamespace=http://www.agora.msa.fr/TarifMaladie > schemaLocation=ListeProduit.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > ERROR - GeronimoLog.error(108) | Exception resolving entity: > schemaLocation=ListeProduit.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > java.io.FileNotFoundException: > /home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/ListeProduit.xsd > (No such file or directory) > at java.io.FileInputStream.open(Native Method) > at java.io.FileInputStream.<init>(FileInputStream.java:106) > at java.io.FileInputStream.<init>(FileInputStream.java:66) > at > sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) > at > sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) > at java.net.URL.openStream(URL.java:1007) > at > org.apache.ode.axis2.util.Axis2UriResolver.resolveEntity(Axis2UriResolver.java:41) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1872) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1902) > at > org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1674) > at > org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:169) > at > org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:82) > at > org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:359) > at > org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:304) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1884) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1902) > at > org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1674) > at > org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:169) > at > org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:347) > at > org.apache.axis2.description.WSDLToAxisServiceBuilder.getXMLSchema(WSDLToAxisServiceBuilder.java:140) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.copyExtensibleElements(WSDL11ToAxisServiceBuilder.java:2186) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:306) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:297) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:265) > at > org.apache.ode.axis2.hooks.ODEAxisService.createService(ODEAxisService.java:79) > at org.apache.ode.axis2.ODEServer.createService(ODEServer.java:299) > at > org.apache.ode.axis2.BindingContextImpl.activateMyRoleEndpoint(BindingContextImpl.java:59) > [ Show ยป ] > Matthieu Riou - 17/Oct/07 04:19 PM This is unfortunately a ws-commons > XmlSchema bug, the original stack is reproduced below. The situation is > basically: WSDL -> XSD1 -> XSD2 The baseUri we get from the SchemaBuilder to > resolve XSD2 is wrong as it's resolved relatively to the WSDL instead of > XSD1. I wish it was simple to fix but actually it's not as it's more of a > design issue in XmlSchema. All imports within a WSDL document (including > transitive ones like we have here) are associated to a single > XmlSchemaCollection. And the baseUri used for all resolving is the one of the > collection. They should either have a collection per document or associate a > baseUri with the document instead of the collection. I'm going to file a bug > for XmlSchema for now. Apparently it's only been reported by one person in > the community and there's a workaround. If a customer have the same problem > or if more people run into it, we might have to consider fixing it ourselves. > 15:20:11,083 DEBUG [ODEAxisService] resolveEntity: > targetNamespace=http://www.agora.msa.fr/TarifMaladie > schemaLocation=../XSDSchema/MatricePriseEnCharge.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > DEBUG - GeronimoLog.debug(66) | resolveEntity: > targetNamespace=http://www.agora.msa.fr/TarifMaladie > schemaLocation=ListeProduit.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > 15:20:11,088 DEBUG [ODEAxisService] resolveEntity: > targetNamespace=http://www.agora.msa.fr/TarifMaladie > schemaLocation=ListeProduit.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > ERROR - GeronimoLog.error(108) | Exception resolving entity: > schemaLocation=ListeProduit.xsd > baseUri=file:/home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/NewDiagram2-Pool0.wsdl > java.io.FileNotFoundException: > /home/mriou/dev/tools/platform/apache-tomcat-5.5.23/webapps/ode/WEB-INF/processes/TestXSD/BPMN/ListeProduit.xsd > (No such file or directory) at java.io.FileInputStream.open(Native > Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) > at java.io.FileInputStream.<init>(FileInputStream.java:66) at > sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) > at > sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) > at java.net.URL.openStream(URL.java:1007) at > org.apache.ode.axis2.util.Axis2UriResolver.resolveEntity(Axis2UriResolver.java:41) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1872) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1902) > at > org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1674) > at > org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:169) > at > org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:82) > at > org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:359) > at > org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:304) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1884) > at > org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1902) > at > org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1674) > at > org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:169) > at > org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:347) > at > org.apache.axis2.description.WSDLToAxisServiceBuilder.getXMLSchema(WSDLToAxisServiceBuilder.java:140) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.copyExtensibleElements(WSDL11ToAxisServiceBuilder.java:2186) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:306) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:297) > at > org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:265) > at > org.apache.ode.axis2.hooks.ODEAxisService.createService(ODEAxisService.java:79) > at org.apache.ode.axis2.ODEServer.createService(ODEServer.java:299) > at > org.apache.ode.axis2.BindingContextImpl.activateMyRoleEndpoint(BindingContextImpl.java:59) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.