在JAX-WS Web服务中使用@WebParam(partName)注释不起作用

问题描述 投票:0回答:1

这是生成wsdl的Java代码:

@WebMethod(action = "sendRequest")
@WebResult(partName= "message")
public String addRequest(@WebParam(partName = "firstName") String firstName,
        @WebParam(partName = "lastName") String lastName, @WebParam(partName = "jmbg") long jmbg,
        @WebParam(partName = "dateTime") Date dateTime) {
    try {
        appointmentManager.getAppointmentRequest().add(new AppointmentRequest(firstName, lastName, jmbg, dateTime));
        return "Central office is closed due to the reconstruction. It will reopen on Monday.";
    } catch (Exception e) {
        return "Wrong format";
    }
}`

这是我生成的wsdl中的结果复杂类型:`

<xs:complexType name="addRequest">
   <xs:sequence>
     <xs:element minOccurs="0" name="arg0" type="xs:string"/>
     <xs:element minOccurs="0" name="arg1" type="xs:string"/>
     <xs:element name="arg2" type="xs:long"/>
     <xs:element minOccurs="0" name="arg3" type="xs:dateTime"/>
   </xs:sequence>
</xs:complexType>`

如您所见。输入的args称为arg0,arg1,arg2,arg3,而不是我在注释中指定的名称。

java web-services wsdl jax-ws
1个回答
0
投票

请善用@WebParam的属性name。例如,在您的情况下,您的方法签名可能看起来像:

public String addRequest(@WebParam(name = "firstName") String firstName,
        @WebParam(name = "lastName") String lastName, @WebParam(name = "jmbg") long jmbg,
        @WebParam(name = "dateTime") Date dateTime)

请仅在Web服务操作为RPC样式或Document样式且参数样式为BARE时使用partName。对于默认参数样式WRAPPED,不应使用此partName属性(转换为wsdl:part名称)。默认情况下,如果未指定partName,则默认值为@ WebParam.name

Recommendation:最好仅使用包含所有属性的POJO,除非wsdl已被共享,以便最大程度地减少方法的参数数量以增强strong text干净的代码,“ XML编组和反编组”将更快。

© www.soinside.com 2019 - 2024. All rights reserved.