Я устанавливаю сервер 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>