12

オブジェクトWebServiceReplyを返す操作を使用して、JAX-WSタイプのWebサービスを作成しています。クラスWebServiceReply自体には、Object型のフィールドが含まれています。個々の操作は、操作に応じて、そのフィールドにいくつかの異なるデータ型を入力します。

WSDLを公開し(Netbeans 6.7を使用しています)、ASP.NETアプリケーションを取得してWSDLを取得および解析することは問題ありませんでしたが、操作を呼び出そうとすると、次の例外が発生します。

javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
 - with linked exception:
[javax.xml.bind.JAXBException: class [LDataObject.Patient; nor any of its super class is known to this context.]

DataObject.PatientクラスとWebServiceReplyクラスでアノテーションをマークして、機能させるにはどうすればよいですか?ターゲットクラス内のアノテーションに基づいてマーシャリングに関する決定的なリソースを精緻化することもできなかったので、誰かが私にもそれを指摘できれば素晴らしいと思います。

WebServiceReply.java

@XmlRootElement(name="WebServiceReply")
public class WebServiceReply {


    private Object returnedObject;
    private String returnedType;
    private String message;
    private String errorMessage;

    .......... // Getters and setters follow

}

DataObject.Patient.java

@XmlRootElement(name="Patient")

public class Patient {

    private int uid;
    private Date versionDateTime;
    private String name;
    private String identityNumber;

    private List<Address> addressList;
    private List<ContactNumber> contactNumberList;
    private List<Appointment> appointmentList;
    private List<Case> caseList;
}

解決

(彼の答えをくれたGregoryMostizkyに感謝します)

WebServiceReplyクラスを編集して、可能なすべての戻りオブジェクトが新しいクラスReturnValueBaseから拡張されるようにし、@XmlSeeAlsoを使用して注釈をReturnValueBaseに追加しました。その後、JAXBは正常に機能しました。

それでも、私はまだJAX-WSでのJAXBマーシャリングについて学習しているので、誰かがこれに関するチュートリアルを投稿できれば素晴らしいと思います。

グレゴリー:リターンオブジェクトはReturnValueBaseからサブクラス化する必要があるという回答にアドオンを追加することをお勧めします。あなたの助けをどうもありがとう!私は長い間この問題に悩まされてきました!

4

1 に答える 1

15

@XmlSeeAlsoを使用して、JAXB実装に追加のクラスも含めるようにする必要があります。

あなたの場合、それは次のようになります:

@XmlRootElement
@XmlSeeAlso({Patient.class, ....})
public class ReturnValueBase {
}

また、returnedObjectプロパティをReturnValueBaseタイプに変更します。

于 2009-07-22T09:48:43.907 に答える