Запрос soap, состоящий из двух схем xsd

Я создал Spring SOAP Controller, который успешно получает мой запрос в SOAPUI. К сожалению, хотя основной объект Request является обязательным, а остальная часть объекта Request - нет.

Сам объект запроса определяется в 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.

Результирующий объект Java CustomerInfoType XSD (создание 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, но со значением атрибута Request ....

0
0
299
1

Ответы 1

Итак, мое пространство имен @PayloadRoot было неправильным, потому что меня обычно путает SOAP.

wsdl11Definition.setTargetNamespace("http://services.com/");

Верно, но мое пространство имен в контроллере тоже было таким, и оно должно было быть пространством имен XSD: services.types.com

как это было определено в пространстве имен запроса SOAP в SOAPUI.

Другие вопросы по теме