You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by "Ajith Harshana Ranabahu (JIRA)" <ji...@apache.org> on 2007/07/02 09:56:04 UTC

[jira] Commented: (WSCOMMONS-173) targetNamespace attribute on schema tag seems to be required when using import

    [ https://issues.apache.org/jira/browse/WSCOMMONS-173?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12509507 ] 

Ajith Harshana Ranabahu commented on WSCOMMONS-173:
---------------------------------------------------

This seems to be related to Axis2 more than to XMLSchema. Any more details ?

> targetNamespace attribute on schema tag seems to be required when using import
> ------------------------------------------------------------------------------
>
>                 Key: WSCOMMONS-173
>                 URL: https://issues.apache.org/jira/browse/WSCOMMONS-173
>             Project: WS-Commons
>          Issue Type: Bug
>          Components: XmlSchema
>         Environment: Windows XP, JRE 1.5.0_06
>            Reporter: simon clare
>         Attachments: Request_Logon.xsd, service.wsdl
>
>
> Apologies if this is:
> A: not a very clear bug report.  I should really recreate this in isolation, but I'm too idle. 
> B: Actually nothing in fact to do with WS-Commons XMLSchema
> I'm using Axis2's org.apache.axis2.wsdl.WSDL2Java which reads a WSDL in, and does a bunch of fun generation stuff. My WSDL defines a document literal style Web Service which includes external XSD's. Those XSD's then internally include a whole bunch of other XSD's. Under the hood Axis2 is using org.apache.ws.commons.schema.XmlSchemaCollection.read to read the inlined schemas. 
> The chunk of code which does this is in org.apache.axis2.description.WSDLToAxisServiceBuilder:
>     protected XmlSchema getXMLSchema(Element element, String baseUri) {
>         XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
>         if (baseUri != null) schemaCollection.setBaseUri(baseUri);
>         if (customResolver != null) {
>             schemaCollection.setSchemaResolver(customResolver);
>         }
>         return schemaCollection.read(element);
>     }
> As far as I can work out "element" is the root DOM node of the imported XSD. 
> XMLSchema then falls over with a NullPointerException as follows:
> log4j:WARN No appenders could be found for logger (org.apache.axis2.description.WSDL11ToAxisServiceBuilder).
> log4j:WARN Please initialize the log4j system properly.
> Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
> 	at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:112)
> 	at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:32)
> 	at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:21)
> Caused by: org.apache.axis2.AxisFault: java.lang.NullPointerException; nested exception is: 
> 	java.lang.RuntimeException: java.lang.NullPointerException
> 	at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:250)
> 	at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:103)
> 	... 2 more
> Caused by: java.lang.RuntimeException: java.lang.NullPointerException
> 	at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1808)
> 	at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1820)
> 	at org.apache.ws.commons.schema.SchemaBuilder.handleImport(SchemaBuilder.java:1552)
> 	at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:156)
> 	at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:315)
> 	at org.apache.axis2.description.WSDLToAxisServiceBuilder.getXMLSchema(WSDLToAxisServiceBuilder.java:132)
> 	at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.copyExtensibleElements(WSDL11ToAxisServiceBuilder.java:1719)
> 	at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:214)
> 	... 3 more
> Caused by: java.lang.NullPointerException
> 	at org.apache.ws.commons.schema.SchemaBuilder$1.validate(SchemaBuilder.java:1534)
> 	at org.apache.ws.commons.schema.SchemaBuilder.setNamespaceAttributes(SchemaBuilder.java:283)
> 	at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:78)
> 	at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:67)
> 	at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:325)
> 	at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:272)
> 	at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1806)
> When the schema is initially created via the constructor  XmlSchema(XmlSchemaCollection parent) it does nothing with the attribute syntacticalTargetNamespace. The code in SchemaBuilder.setNamespaceAttributes  wants to set the namespace if its there. If its not there then ignores it, as its expecting there not to be a validator class variable in the XMLSchema object if there is no namespace. However, somehow in this instance of the Schema a validator has been created (not quite got to how yet, as it's a fun little anonymous inner class and my head hurts).
> Basically SchemaBuilder$TargetNamespaceValidator.validate:
> public void validate(XmlSchema pSchema) {
>                 final boolean valid;
>                 if (isEmpty(uri)) {
>                     valid = isEmpty(pSchema.syntacticalTargetNamespace);
>                 } else {
>                     valid = pSchema.syntacticalTargetNamespace.equals(uri);
>                 }
> finds uri not to be empty (not sure which of the many possible URI's this is) and assumes you must have a syntacticalTargetNamespace to call equals on. Unfortunately its null.
> Is this:
> A: An Axis2 problem (they using your API wrongly)?
> B: A bug in XMLSchema
> C: An incorrectly defined XSD trying to be imported.
> It seems to work OK if I set my imported xsd's to have a targetNamespace. However, I think the XSD spec says they don't *have* to have one. In any case the rather unpleasant Null Pointer might not be the best way to deal with any error condition. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org