1

wsimport を使用して、jaxws SOAP 生成クライアントによって消費される WCF サービスがあるとします。サービス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 オブジェクト (フィールドは null または 0) から何も取得できず、WCF からの戻り値は JAXWS によって正しく逆シリアル化できません。例外はありませんでしたが。

それらが同じパッケージにある場合、 setPerson が呼び出されますが、異なるパッケージにある場合は呼び出されません。

複雑なタイプの Person を DoSomething として別のパッケージに入れることは可能でしょうか。

4

1 に答える 1

1

Person のパッケージ内に魔法の package-info.java ファイルが必要であることがわかりました

于 2012-07-18T22:05:46.007 に答える