1

現在、Eclipse (Juno、JavaEE) で JAX-WS を使用して Web サービスを構築しています。私は JAX-WS と Java 1.6 の使用に制限されています (これを更新することは制御できません)。

コードから Web サービスを生成しようとすると、次のエラーが表示されます。

サービス クラス "webservice.WebService" は、JAX-RPC 1.1 仕様の 1 つ以上の要件に準拠していないため、正しく展開または機能しない可能性があります。

サービス クラス「webservice.WebService」を介して使用される値型「java.lang.Enum」のフィールドまたはプロパティ「declaringClass」には、JAX-RPC でサポートされていないデータ型「java.lang.Class」があります。 1.1仕様。この型のインスタンスは、正しくシリアル化または逆シリアル化されない場合があります。データが失われたり、Web サービスが完全に機能しなくなる可能性があります。

サービス クラス「webservice.WebService」を介して使用される値型「webservice.ReferenceDataSetList」のフィールドまたはプロパティ「referenceDataSet」には、JAX-RPC 1.1 仕様でサポートされていないデータ型「java.util.ArrayList」があります。 . この型のインスタンスは、正しくシリアル化または逆シリアル化されない場合があります。データが失われたり、Web サービスが完全に機能しなくなる可能性があります。

この警告を生成する @WebMethod は次のとおりです。

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

    return status;
}
  • RequestStatus は、列挙型の Result とオプションの文字列メッセージを含むオブジェクトです。
  • 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

で WSDL を確認できます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 に答える