我正在探索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
}
感谢。
答案 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;
}