1

我目前正在 Eclipse(Juno、JavaEE)中使用 JAX-WS 构建 Web 服务。我仅限于使用 JAX-WS 和 Java 1.6(这是我无法控制的更新)

当我尝试从我的代码生成 Web 服务时遇到的错误是:

服务类“webservice.WebService”不符合 JAX-RPC 1.1 规范的一项或多项要求,并且可能无法正确部署或运行​​。

通过服务类“webservice.WebService”使用的值类型“java.lang.Enum”上的字段或属性“declaringClass”具有 JAX-RPC 不支持的数据类型“java.lang.Class” 1.1 规范。该类型的实例可能无法正确序列化或反序列化。可能会导致数据丢失或 Web 服务完全失败。

通过服务类“webservice.WebService”使用的值类型“webservice.ReferenceDataSetList”上的字段或属性“referenceDataSet”具有数据类型“java.util.ArrayList”,JAX-RPC 1.1 规范不支持该数据类型. 该类型的实例可能无法正确序列化或反序列化。可能会导致数据丢失或 Web 服务完全失败。

生成此警告的 @WebMethod 是:

@WebMethod
public RequestStatus setReferenceData(ReferenceDataSetList refData)
{
    // TODO
    RequestStatus status = new RequestStatus(Result.FAILURE);

    return status;
}
  • RequestStatus 是一个包含枚举结果和可选字符串消息的对象。
  • ReferenceDataSetList 包含一个 ArrayList 并且 ReferenceDataSet 与 RequestStatus 具有相同的结构(不同的枚举类型)

我环顾四周,找不到任何解决此警告的方法。

我真的不知道下一步该往哪里看...

编辑 我应该补充一点,我可以运行该服务,但我得到的错误是当我尝试生成到 WSDL 以便我可以构建客户端时

4

1 回答 1

0

我不确定可能是什么问题。我在 JDK 6 中使用 JAX-WS RI 2.1.6(这个运行时是 JDK 的一部分)并且运行顺利。

枚举:

public enum Result {
    FAILURE;
}

响应包装器:

public class RequestStatus {

    private Result result;

    public RequestStatus() {
    }

    public RequestStatus(Result result) {
        this.result = result;
    }

    public Result getResult() {
        return result;
    }

    public void setResult(Result result) {
        this.result = result;
    }

}

请求包装器:

public lass ReferenceDataSetList {

    private List<String> list;

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

}

和 SEI 类:

package test;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class TestService {

    @WebMethod
    public RequestStatus setReferenceData(ReferenceDataSetList refData) {
        return new RequestStatus(Result.FAILURE);
    }

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8084/service", new TestService());
    }

}

控制台输出是:

28/02/2013 10:34:43 AM com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
INFO: Dynamically creating request wrapper Class test.jaxws.SetReferenceData
28/02/2013 10:34:43 AM com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
INFO: Dynamically creating response wrapper bean Class test.jaxws.SetReferenceDataResponse

我可以在http://localhost:8084/service?wsdl. 列表和枚举(片段)的架构是:

<xs:complexType name="setReferenceData">
<xs:sequence>
<xs:element name="arg0" type="tns:referenceDataSetList" 
            minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="referenceDataSetList">
<xs:sequence>
<xs:element name="list" type="xs:string" nillable="true" minOccurs="0" 
            maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:complexType name="requestStatus">
<xs:sequence>
<xs:element name="result" type="tns:result" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>

<xs:simpleType name="result">
<xs:restriction base="xs:string">
<xs:enumeration value="FAILURE"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>
于 2013-02-28T16:32:41.897 回答