jax-ws-generation: @WebMethod vs. @ResponseWrapper

Habe ich zwei sehr ähnliche wsdl-Dateien, die Erstellung von verschiedenen Java-Code. Im ersten Fall bekomme ich eine Methode mit der @WebMethod-annotation und einen Wert zurück, im zweiten Fall eine Methode mit @ResponseWrapper-annotation und keine Rückgabewerte erzeugt. Ich möchte die Werte zurückgeben.

1. Service1

<wsdl:operation name="foo">
        <wsdl:input  name="deleteUser"         message="tns:deleteUserRequest"/>
        <wsdl:output name="deleteUserResponse"  message="tns:deleteUserResponse"/>
        <wsdl:fault name="ServiceFault"        message="tns:ServiceFault"/>
    </wsdl:operation> 

generiert:

    @WebMethod
@WebResult(name = "commonReturnType", targetNamespace = "http://www.foo.com/fooSchemaTypes-v3.0/", partName = "returnValue")
public CommonReturnType foo(
    @WebParam(name = "fooType", targetNamespace = "http://www.foo.com/fooSchemaTypes-v3.0/", partName = "user")
    FooType user)
    throws ServiceFault
;

2. FooBarService

    <wsdl:operation name="fooBar">
        <wsdl:input name="fooBar" message="tns:fooBarRequest"></wsdl:input>
        <wsdl:output name="ackFileResponse" message="tns:fooBarResponse"></wsdl:output>
        <wsdl:fault name="ServiceFault" message="tns:fooBarFault"></wsdl:fault>
    </wsdl:operation>

genereates:

  @WebMethod
@RequestWrapper(localName = "fooBar", targetNamespace = "http://www.foo.com/fooBarSchemaTypes-v1.0/", className = "com.foo.fooBar.v1_0.GetFileType")
@ResponseWrapper(localName = "fooBarResponse", targetNamespace = "http://www.foo.com/fooBarSchemaTypes-v1.0/", className = "com.foo.fooBar.v1_0.CommonReturnType")
public void ackFile(
    @WebParam(name = "id", targetNamespace = "")
    String id,
    @WebParam(name = "timestamp", targetNamespace = "")
    XMLGregorianCalendar timestamp,
    @WebParam(name = "anotherId", targetNamespace = "")
    String anotherId,
    @WebParam(name = "fileId", targetNamespace = "")
    String fileId,
    @WebParam(name = "returnCode", targetNamespace = "", mode = WebParam.Mode.OUT)
    Holder<ReturnCode> returnCode,
    @WebParam(name = "errorMessage", targetNamespace = "", mode = WebParam.Mode.OUT)
    Holder<String> errorMessage);

Den code, der generiert den code ist genau das gleiche.

Wenn nötig, kann ich das markup für die Nachrichten und die Arten. Ich hoffe anonymising nicht mess up die relevanten Teile.

Ich würde gerne die zweite version auch mit einem Rückgabewert. Wie kann ich das erreichen?

InformationsquelleAutor daefu | 2012-06-25
Schreibe einen Kommentar