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
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]