1

我正在构建要在 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);
    }
}

此示例的完整代码可在此处获得。

下面是 SOAP 响应,包含车轮的正确自行车 ID,但不包含实际的自行车元素。因此wheel.getBike()将始终返回NULL客户端。

是否有让 JAX-WS 发送所有相关对象的注释?或者至少在客户端上获取自行车 ID,以便我可以通过第二个 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>
4

0 回答 0