My WebServiceConfiguration`` extending ``WsConfigurerAdapter`` defines aside the ``ServletRegistrationBean`` also the following ``XsdSchema(Collection)`` beans:
// Just a bean with one schema@BeanpublicXsdSchemaschema() {
returnnewSimpleXsdSchema(newClassPathResource("xsd/schemaA.xsd"));
}
// A bean with both schemas@BeanpublicXsdSchemaCollectionschemaCollection() {
returnnewXsdSchemaCollection() {
@OverridepublicXsdSchema[] getXsdSchemas() {
returnnewXsdSchema[] {
newSimpleXsdSchema(newClassPathResource("xsd/schemaA.xsd")),
newSimpleXsdSchema(newClassPathResource("xsd/schemaB.xsd"))
};
}
@OverridepublicXmlValidatorcreateValidator() {
thrownewUnsupportedOperationException();
}
};
}
And the WSDL bean:
@Bean(name = "soapWsdl")
publicDefaultWsdl11DefinitiondefaultWsdl11Definition(XsdSchemaschema, XsdSchemaCollectionschemaCollection) {
DefaultWsdl11Definitionwsdl11Definition = newDefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("SoapPort");
wsdl11Definition.setLocationUri("/service/soap");
wsdl11Definition.setTargetNamespace("https://www.mycompany.com");
// At this point I use just one of the folliwing:wsdl11Definition.setSchema(schema);
wsdl11Definition.setSchemaCollection(schemaCollection);
returnwsdl11Definitionl;
}
Using one of these in the bean above:
wsdl11Definition.setSchema(schema);
If I use only XsdSchema defining one schema (regardless whether schemaA or schemaB), everything works, the SOAP Web service is running and WSDL is generated
Now the NPE is thrown although the InliningXsdSchemaTypesProvider sets the one schema as the collection with one schema. The error thrown is:
2018-10-05 21:29:28.636 WARN 164968 — [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'soapWsdl' defined in class path resource [cz/vse/soap/WebServiceConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition]: Factory method 'defaultWsdl11Definition' threw exception; nested exception is java.lang.NullPointerException
...
Caused by: java.lang.NullPointerException: null at org.springframework.xml.xsd.SimpleXsdSchema.getTargetNamespace(SimpleXsdSchema.java:94) ~[spring-xml-3.0.3.RELEASE.jar!/:na] at com.mycompany.WebServiceConfig.defaultWsdl11Definition(WebServiceConfig.java:66) ~[classes!/:0.0.1]
I make the things work with calling the SimpleXsdSchema::afterPropertiesSet which is not somehow called upon the bean instantiation. Hard to say what happens. However, editing the method like this makes the schemas work together:
Why passing the XsdSchema and XsdSchemaCollection doesn't behave equally even they are supposed to do according to DefaultWsdl11Definition? I expect it should work even without calling the schema.afterPropertiesSet().
Nikolas Charalambidis opened SWS-1041 and commented
Hi,
I have two schemas in
src/main/resources
with the same namespacewww.mycompany.com
. schemaA.xsd and schemaB.xsd have the same header:My WebServiceConfiguration`` extending ``WsConfigurerAdapter`` defines aside the ``ServletRegistrationBean`` also the following ``XsdSchema(Collection)`` beans:
And the WSDL bean:
Using one of these in the bean above:
wsdl11Definition.setSchema(schema);
If I use only
XsdSchema
defining one schema (regardless whether schemaA or schemaB), everything works, the SOAP Web service is running and WSDL is generatedwsdl11Definition.setSchemaCollection(schemaCollection);
Now the NPE is thrown although the
InliningXsdSchemaTypesProvider
sets the one schema as the collection with one schema. The error thrown is:I make the things work with calling the
SimpleXsdSchema::afterPropertiesSet
which is not somehow called upon the bean instantiation. Hard to say what happens. However, editing the method like this makes the schemas work together:Why passing the
XsdSchema
andXsdSchemaCollection
doesn't behave equally even they are supposed to do according toDefaultWsdl11Definition
? I expect it should work even without calling theschema.afterPropertiesSet().
Affects: 2.0.5
Reference URL: https://stackoverflow.com/questions/52672270/jaxb-difference-between-xsdschema-and-xsdschemacollection-while-creating-the-def
The text was updated successfully, but these errors were encountered: