2011-04-25 2 views
0

J'explore SOAP WS en ce moment et j'ai créé une classe très simple que j'expose en tant que service Web.Schéma de réponse SOAP

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

Quand j'appelle ce service Web, la réponse SOAP retourné suit ce format.

<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> 

Ma question est, est-il possible que je puisse influencer la réponse SOAP à suivre une sorte de schéma comme ci-dessous.

<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> 

Mes données proviennent d'une classe POJO comme celle-ci.

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

Merci.

Répondre

0

Je ne sais pas si vous l'avez déjà résolu mais j'ai récemment commencé à travailler sur WS et j'ai fait face exactement au même problème. Je l'ai résolu de toute façon:

Vous devez créer 2 classes Bean 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 
    .... 
     .... 
} 

et procéder comme u do. J'espère que cela résout votre problème.

0

Vous devez créer deux classes et utiliser @XmlAttribute annotation si vous voulez avoir gpa comme un attribut ...

Annotations dans cet exemple sont seulement

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; 

}