Схема ответа SOAP - PullRequest
       7

Схема ответа SOAP

0 голосов
/ 25 апреля 2011

Я сейчас изучаю SOAP WS и создал очень простой класс, который я представляю как веб-сервис.

@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;
    }
}

Когда я вызываю эту веб-службу, возвращается ответ 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, следуя какой-то схеме, как показано ниже.

<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 голосов
/ 25 апреля 2012

Вы должны создать два класса и использовать аннотацию @XmlAttribute, если хотите иметь gpa в качестве атрибута ...

Аннотации в этом примере являются просто иллюстративными

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;

}
0 голосов
/ 31 июля 2011

Я не знаю, если вы уже решили это, но я недавно начал работать над WS и столкнулся с точно такой же проблемой. Я все равно решил:

Вам нужно создать 2 класса Бина Боб 1.

public class ResultBean {

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

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

Боб 2.

public class StudentName {

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

и действуй как ты. Я надеюсь, что это решит вашу проблему.

...