2010-11-20 21 views
9

W tworzenia usługa (CXF oparte) napędzany przez klasę Java (Java2WS) z następującą metodą:Webservice z CXF: Jak korzystać z ResponseWrapper?

@WebMethod 
    @RequestWrapper(className = "com.myproject.wrapper.MyRequestWrapper") 
    @ResponseWrapper(className = "com.myproject.wrapper.MyResponseWrapper") 
    public MyResponse verifyCode(@WebParam(name = "code") String code) { 
    ... 
    return new MyResponse("Hello",StatusEnum.okay); 
    } 

korzystać z owijki do określenia elementów żądanie wzgl. odpowiedź bardziej szczegółowo: poprawne nazwy elementów (zaczynające się wielkimi literami), wymagane i opcjonalne elementy ...). Ale nie jestem pewien, czy jest to właściwy sposób, żeby to zrobić (nie ma dokumentacji pogłębione o owijarki, prawda?)

Klasa MyResponse:

public class MyResponseWrapper { 

    private String result; 
    private ModeEnum status; 

    // getters and setters 
} 

Klasa MyReponseWrapper

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "myResponse") 
public class MyResponseWrapper { 

    @XmlElement(name="Result") 
    private String result; 

    @XmlElement(name = "Status") 
    private StatusEnum status; 

    public MyResponseWrapper() { 
    result="fu"; // just for testing 
    } 

    // getters and setters 
} 

Obecnie nie rozumiem opakowania. Kiedy zwracam instancję MyReponse, w jaki sposób dane z MyResponse są wstrzykiwane do MyResponseWrapper w odpowiedni sposób do treści SOAP odpowiedzi?

Testując ten serwis widzę, że instancja MyResponseWrapper jest instancjonowana, a treść SOAP zawiera poprawne elementy, ale z danymi domyślnymi (na przykład: result = "fu" zamiast "Hello"). Spodziewałem się, że CXF wstrzyknie pasujące dane z MyResponse do MyResponseWrapper. Czy to źle?

Jeśli jest to niewłaściwy sposób, aby to zrobić: Wat jest właściwą metodą określenia wynikowego xml SOAP podczas korzystania z Java2WS?

Przy okazji: powyższe fragmenty kodu źródłowego są przykładami zaczerpniętymi z bardziej złożonych (więcej pól) klas.

Odpowiedz

-1

To jest odpowiednia metoda. Pakiety żądań i odpowiedzi pozwalają tylko na nadpisanie przestrzeni nazw xml i nazw elementów/atrybutów dla elementów żądania/odpowiedzi; odpowiednio - które z kolei odpowiadają metodom zarządzania tymi wartościami.

Ref: http://cxf.apache.org/docs/developing-a-service.html#[email protected]

@RequestWrapper Adnotacja jest zdefiniowany przez interfejs javax.xml.ws.RequestWrapper. Jest on umieszczony na metodach w SEI. Jak wskazuje nazwa, @RequestWrapper określa klasę Java , która implementuje komponent bean opakowania dla parametrów metody, które są zawarte w komunikacie żądania wysłanym w zdalnym wywołaniu. Jest to również używane również do określania nazw elementów i przestrzeni nazw używanych przez środowisko wykonawcze podczas porządkowania i usuwania komunikatu żądania. W poniższej tabeli opisano właściwości adnotacji @RequestWrapper .

localName

Określa nazwę lokalną elementu otoki w reprezentacji XML komunikatu żądania. Wartością domyślną jest nazwa metody lub wartość właściwości opisowej @Nazwa_WebMethod: operationName.

targetNamespace

Określa nazw zgodnie z którym element XML Owijkę zdefiniowane. Wartością domyślną jest docelowy obszar nazw SEI.

className

Określa pełną nazwę klasy Java, który implementuje owijki element.