SOAP响应模式

时间:2011-04-25 01:51:14

标签: java web-services soap soapui

我正在探索SOAP WS,我创建了一个非常简单的东西 我作为Web服务公开的类。

@WebService
public class StudentWS {   
    @WebMethod
    public Student getStudent(){
      Student stud = new Student();
      stud.setId(99);
      stud.setFirstName("John");
      stud.setLastName("Doe");
      stud.setGpa(2.1);
      return stud;
    }
}

当我调用此Web Service时,将返回返回的SOAP响应 这种格式。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getStudentResponse xmlns:ns2="http://annotation/">
         <return>
            <firstName>John</firstName>
            <gpa>2.1</gpa>
            <id>99</id>
            <lastName>Doe</lastName>
         </return>
      </ns2:getStudentResponse>
   </S:Body>
</S:Envelope>

我的问题是,是否有某些方法可以影响SOAP响应以遵循下面的某种Schema。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getStudentResponse xmlns:ns2="http://annotation/">
        <student gpa="2.1">
            <id>99</id>
            <name>
                <firstName></firstName>
                <lastName></lastName>
            </name>
        </student>
      </ns2:getStudentResponse>
   </S:Body>
</S:Envelope>

我的数据来自像这样的POJO类。

@XmlRootElement
public class Student {
    private int id;
    private String firstName;
    private String lastName;
    private double gpa;
    //getters and setters
}

感谢。

2 个答案:

答案 0 :(得分:0)

我不知道你是否已经解决了它,但我最近开始研究WS并面临完全相同的问题。无论如何我解决了它:

您需要创建2个Bean类 豆1。

public class ResultBean {

    private String id;
        private String student;
    private StudentName name = new StudentName ();

//corresponding getter setter methods
    ....
        ....
        ....
}

Bean 2。

public class StudentName {

    private String firstName;
    private String lastName;
//corresponding getter setter methods
    ....
        ....
}

然后像你一样继续。 我希望这能解决你的问题。

答案 1 :(得分:0)

如果您想将gpa作为属性,则必须创建两个类并使用@XmlAttribute注释...

此示例中的注释只是说明性的

public class Student {

    @XmlAttribute
    private String gpa;

    @XmlElement
    private String id;

    @XmlElement
    private Name name;

}

public class Name {

    @XmlElement
    private String firstName;

    @XmlElement
    private String lastName;

}