我正在使用改装网络控制器发布SOAP请求。 @Body正在使用org.simpleframework.xml在类中生成xml。类结构如下
@Root(name = "soap:Envelope")
@NamespaceList({
@Namespace(prefix = "soap", reference = ""),
@Namespace(prefix = "typ", reference = ""),
@Namespace(prefix = "ldb", reference = "")
})
public class RequestEnvelope {
@Element(name = "soap:Header")
RequestHeader requestHeader;
public void setRequestHeader(RequestHeader requestHeader) {
this.requestHeader = requestHeader;
}
public RequestHeader getRequestHeader() {
return requestHeader;
}
@Element(name = "soap:Body")
RequestBody requestBody;
public void setRequestBody(RequestBody requestBody) {
this.requestBody = requestBody;
}
public RequestBody getRequestBody() {
return requestBody;
}
}
我遇到的问题是在提交的主体中生成的xml作为soap的结构:Body首先然后是soap:Header。这导致api调用失败,因为它需要soap:Header是第一个。我曾尝试使用@Order(elements = {"soap:Header", "soap:Body"})
,但应用程序告诉我没有标记为soap的元素:Header或soap:类中的Body。
之前我使用过这个类,但是它似乎遇到了多个元素的问题。从我所看到的,回报按字母顺序排列。
有谁知道如何在生成的xml中停止字母顺序?
由于
答案 0 :(得分:1)
我过去遇到过这个问题,是的,@ Order注释并没有解决问题。有趣的是......我通过改变变量的名称来解决问题,按字母顺序排列,在我的情况下,我只是在“body”(我的变量的名称)中添加了一个“z”,检查我的类并给它一个尝试。
@Root(name = "soap12:Envelope")
@NamespaceList({
@Namespace( prefix = "xsi", reference = "http://www.w3.org/2001/XMLSchema-instance"),
@Namespace( prefix = "xsd", reference = "http://www.w3.org/2001/XMLSchema"),
@Namespace( prefix = "soap12", reference = "http://www.w3.org/2003/05/soap-envelope")
})
public class CardSaleRequestEnvelope {
@Element(name = "soap12:Header", required = true)
private CardSaleRequestHeader header;
@Element(name = "soap12:Body", required = true)
private ZCardSaleRequestBody zbody;
public CardSaleRequestEnvelope() {
}
public CardSaleRequestHeader getHeader() {
return header;
}
public void setHeader(CardSaleRequestHeader header) {
this.header = header;
}
public ZCardSaleRequestBody getBody() {
return zbody;
}
public void setBody(ZCardSaleRequestBody zbody) {
this.zbody = zbody;
}
}
答案 1 :(得分:0)
因为您使用了错误的语法。 你可以尝试:
@Root(name = "soap:Envelope")
@NamespaceList({
@Namespace(prefix = "soap", reference = ""),
@Namespace(prefix = "typ", reference = ""),
@Namespace(prefix = "ldb", reference = "")
})
@Order(elements = {"soap:Envelope/soap:Header", "soap:Envelope/soap:Body"})
public class RequestEnvelope {
@Element(name = "soap:Header")
RequestHeader requestHeader;
public void setRequestHeader(RequestHeader requestHeader) {
this.requestHeader = requestHeader;
}
public RequestHeader getRequestHeader() {
return requestHeader;
}
@Element(name = "soap:Body")
RequestBody requestBody;
public void setRequestBody(RequestBody requestBody) {
this.requestBody = requestBody;
}
public RequestBody getRequestBody() {
return requestBody;
}
}
答案 2 :(得分:0)
有一个可行的解决方案可以保存变量的名称,但是您必须使用@Namespace(reference)
作为前缀而不是@Element(name)
。我知道它看起来不是很干净你猜测@Namespace(prefix)
也会起作用 - 它不会。
@Root(name = "soap:Envelope", strict = false)
@NamespaceList({
@Namespace(reference = "http://www.w3.org/2003/05/soap-envelope",
prefix = "soap")
})
@Order(elements = {"Header", "Body"})
public class LoginRequest {
@Element(name = "Header")
@Namespace(reference = "http://www.w3.org/2003/05/soap-envelope")
public Header header;
@Element(name = "Body")
@Namespace(reference = "http://www.w3.org/2003/05/soap-envelope")
public Body body;
public LoginRequest() {
}
...
}
来源: