Как создать Pojo из xsd: any Object, отправленного с мылом? - PullRequest
1 голос
/ 04 апреля 2019

Я устанавливаю сервер SOAP для более крупного проекта.Я получил файл wsdl, в котором указано только поле xsd: any, а не какой тип объектов я могу получить.

Чтобы упростить свой вопрос, я изменил простое приложение helloworld, которое я нашел.Он выдает ту же ошибку, что и более сложный сервер, над которым я работаю: «1 count of IllegalAnnotationExceptions»

Итак, здесь я создал простой файл wsdl, показывающий объект Person с полями: - firstname - lastName- любой

любой может быть, например, животное.

<xsd:element name="person">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="firstName" type="xsd:string" />
            <xsd:element name="lastName" type="xsd:string" />
            <xsd:sequence>
                <xsd:any/>
            </xsd:sequence>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

Я позволил jaxb генерировать классы.Поскольку xsd: любой объект может быть животным, я создал класс Animal:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"name" })
@XmlRootElement(name = "animal")
public class Animal
{
    @XmlElement(name = "name")
    protected String name;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

}

И я добавил Animal в ObjectFactory:

    @XmlElementDecl(name = "animal")
    public Animal createAnimal()
    {
        return new Animal();
    }

Моя конечная точка должна регистрировать класслюбого объекта:

@Endpoint
public class HelloWorldEndpoint
{

    private static final Logger LOGGER = LogManager.getLogger(HelloWorldEndpoint.class);

    @PayloadRoot(namespace = "http://codenotfound.com/types/helloworld", localPart = "person")
    @ResponsePayload
    public Greeting sayHello(@RequestPayload Person request)
    {
        LOGGER.info("Endpoint received person[firstName={},lastName={}]", request.getFirstName(), request.getLastName());

        LOGGER.info("Any Class = {} ", request.getAny().getClass());
        //do stuff
        return response
    }
}

Наконец, мыло, которое я отправляю с soapUI:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hel="http://codenotfound.com/types/helloworld">
   <soapenv:Header/>
   <soapenv:Body>
      <hel:person>
         <hel:firstName>John</hel:firstName>
         <hel:lastName>Doe</hel:lastName>
         <animal>
            <name>Elefant</name>
         </animal>
      </hel:person>
   </soapenv:Body>
</soapenv:Envelope>
...