是否可以在JAVA中以非字母顺序返回SOAP消息?

时间:2012-10-12 09:38:44

标签: java soap alphabetical

我尝试在soap返回消息中设置返回类型的顺序,但它会按字母顺序打印出来。有没有办法可以改变返回类型的顺序?

我按照C,A,B的顺序设置类型,但它总是打印出ABC。

网络方法

@WebMethod(operationName = "Method")
    @WebResult(name="myType")    
    public MyType Method(@WebParam(name = "string1") String string1, @WebParam(name = "string2") String string2,@WebParam(name = "string3") String string3) {

        MyType mt = new MyType();

        mt.setC(string3);
        mt.setA(string1);
        mt.setB(string2);

        return mt;
    }

MyType Class

public class MyType {

    private String a;
    private String b;
    private String c;

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

    public String getC() {
        return c;
    }

    public void setC(String c) {
        this.c = c;
    }


}

目前的肥皂反应

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:MethodResponse xmlns:ns2="http://bbb/">
            <myType>
                <a>one</a>
                <b>two</b>
                <c>three</c>
            </myType>
        </ns2:MethodResponse>
    </S:Body>
</S:Envelope>

理想的肥皂反应

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:MethodResponse xmlns:ns2="http://bbb/">
            <myType>
                <c>three</c>
                <a>one</a>
                <b>two</b>
            </myType>
        </ns2:MethodResponse>
    </S:Body>
</S:Envelope>

2 个答案:

答案 0 :(得分:3)

您可以通过向MyType类添加JAXB注释来实现此目的:

import javax.xml.bind.annotation.*;

@XmlType(propOrder = {"c", "a", "b"})
public class MyType {
  //...

但如果您尝试复制现有服务,那么最好的方法是使用wsimport生成与现有WSDL匹配的Java类。

答案 1 :(得分:0)

更改bean中方法的顺序,可能不是调用顺序,它对结果XML没有任何影响。但更重要的是,使用WSDL,您可以在其中正确指定响应的模式,然后使用wsdl2java从中生成bean。