Комплексный пакет jaxws
Скажем, у меня есть служба WCF, используемая клиентом jaxws, созданным с помощью мыла, с помощью wsimport. Сервис SEI выглядит так
@WebMethod(operationName = "DoSomething", action = "http://mydomain.com/PersonService/Dosomething")
@WebResult(name = "DoSomethingResult", targetNamespace = "http://mydomain.com/")
@RequestWrapper(localName = "DoSomething", targetNamespace = "http://mydomain.com/", className = "webservice.jaxws.DoSomething")
@ResponseWrapper(localName = "DoSomethingResponse", targetNamespace = "http://mydomain.com/", className = "webservice.jaxws.DoSomething")
public Person doSomething(
@WebParam(name = "person", targetNamespace = "http://mydomain.com/")
Person person);
который принимает комплексный тип Person и возвращает тот же тип Person и генерирует DoSomething выглядит
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"person"
})
@XmlRootElement(name = "DoSomething")
public class DoSomething {
@XmlElement(nillable = true)
protected Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person value) {
this.person = value;
}
все работает нормально, если Person - это тот же пакет, что и DoSomething, и как только я переместил Person в другое место, служба WCF не сможет получить что-либо из объекта Person (поля имеют нулевое или нулевое значение), возвращаемое значение из WCF не может быть корректно десерилизовано JAXWS, хотя не было никаких исключений.
Я заметил, что если они находятся в одном пакете, то будет вызываться setPerson, но не если они находятся в разных пакетах.
Мне интересно, возможно ли поместить комплексный тип Person в другой пакет, как DoSomething.
1 ответ
Оказывается, нужен волшебный файл package-info.java в пакете Person