JBoss 7.1 で使用する SOAP サービスを構築しています。今まで、私は注釈のみを使用しており、生成されたファイルの XML ファイルは使用していません。POJO では、サーバーとクライアントの両方が正常に動作します。
ただし、SOAP 応答の一部にしたい他のオブジェクトを参照するオブジェクトがあります。注釈を使用することもできます@XmlElement
が、オブジェクトが複数回参照されると、それも複数回含まれます。@XmlIDREF
アノテーションを使用してこれを回避しようとしましNULL
たが、クライアント側でオブジェクトが発生します。
オブジェクトが属する をWheel
参照するオブジェクトと、すべての車輪を取得するサービスを含むスタンドアロンの例を作成しました(これは短く不完全なコードです。実際のコードへのリンクについては、以下を参照してください)。Bike
@WebService
public interface IWheelService {
Collection<Wheel> getAllWheels();
}
public class Wheel extends XmlEntity {
private String type;
private Bike bike;
public Wheel(Bike bike, String type) {
this.bike = bike;
this.type = type;
}
@XmlIDREF
public Bike getBike() {
return bike;
}
@XmlElement
public String getType() {
return type;
}
}
public class Bike extends XmlEntity {
private String color;
public Bike(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
public abstract class XmlEntity implements Serializable {
public static int idGenerator = 0;
private int id = idGenerator++;
@XmlTransient
public int getId() {
return id;
}
@XmlID
@XmlAttribute(name = "id")
@Transient
public String getXmlId() {
return String.format("%s:%d", this.getClass().getSimpleName(), this.id);
}
}
この例の完全なコードは、こちらから入手できます。
以下は、車輪の正しい自転車 ID を含む SOAP 応答ですが、実際の自転車要素は含まれていません。したがって、wheel.getBike()
常にNULL
クライアントに返されます。
JAX-WS にすべての関連オブジェクトを送信させる注釈はありますか? または、少なくともクライアントでバイク ID を取得して、2 番目の SOAP リクエストでそれらを取得できるようにするには?
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getAllWheelsResponse xmlns:ns2="http://demo/">
<return id="Wheel:1">
<bike>Bike:0</bike>
<type>slick</type>
</return>
<return id="Wheel:2">
<bike>Bike:0</bike>
<type>spike</type>
</return>
</ns2:getAllWheelsResponse>
</S:Body>
</S:Envelope>