Я создал Spring SOAP Controller, который успешно получает мой запрос в SOAPUI. К сожалению, в то время как основной объект запроса является обязательным, наряду с атрибутом, остальные объекты запроса не являются.
Сам объект запроса определяется в XSD, а затем различные поля в объекте запроса определяются другим XSD. Я предполагаю, что это либо какая-то конфигурация Spring, либо какая-то проблема пространства имен с Java-объектом, сгенерированным XSD. Но мне не на что пытаться, и прошло два дня.
Запрос XSD результирующего Java-объекта (создание POM XJC):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Request", propOrder = {
"customerInfo"
})
public class Request {
@XmlElement()
protected CustomerInfoType customerInfo;
@XmlAttribute(name = "schemaVersion")
protected String schemaVersion;
}
Я могу поместить все, что я хочу, в schemaVersion, и когда я отлаживаю в контроллере, я вижу все, что я вставил для него в SOAPUI.
CustomerInfoType XSD результирующий Java-объект (создание POM XJC):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CustomerInfoType", propOrder = {
"accountNumber",
})
public class CustomerInfoType {
protected BigInteger accountNumber;
}
Запрос находится в Request.xsd, а CustomerInfoType является CommonTypes.xsd
Вот относительная конфигурация Spring:
@Bean(name = "RequestyDefinition")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchemaCollection requestSchemaCollection) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("RequestPort");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace("http://services.com/");
wsdl11Definition.setSchemaCollection(requestSchemaCollection);
return wsdl11Definition;
}
@Bean
public XsdSchemaCollection requestSchemaCollection(XsdSchema request, XsdSchema commonTypes) {
return new XsdSchemaCollection() {
public XsdSchema[] getXsdSchemas() {
return new XsdSchema[]{request, commonTypes};
}
public XmlValidator createValidator() {
throw new UnsupportedOperationException();
}
};
}
@Bean(name = "request")
public XsdSchema requestSchema()
{
return new SimpleXsdSchema(new ClassPathResource("Request.xsd"));
}
@Bean(name = "commonTypes")
public XsdSchema commonTypesSchema()
{
return new SimpleXsdSchema(new ClassPathResource("CommonTypes.xsd"));
}
Я получаю Запрос с нулевым значением для CustomerInfoType, но со значением для атрибута запроса ....