1

パブリック Web サービスからテスト クライアントを作成しようとしています: http://www.webservicex.com/currencyconvertor.asmx?WSDL

CXF 2.x で Eclipse を使用して、WS クライアントを自動生成しました。これまでのところ問題ないように見えますが、実行すると次のエラーのみが発生します。これは、次のように自動conversionRate生成されます。

@WebService(targetNamespace = "http://www.webserviceX.NET/", name = "CurrencyConvertorSoap")
@XmlSeeAlso({ObjectFactory.class})
public interface CurrencyConvertorSoap {

    @WebResult(name = "ConversionRateResult", targetNamespace = "http://www.webserviceX.NET/")
    @RequestWrapper(localName = "ConversionRate", targetNamespace = "http://www.webserviceX.NET/", className = "ConversionRate")
    @WebMethod(operationName = "ConversionRate", action = "http://www.webserviceX.NET/ConversionRate")
    @ResponseWrapper(localName = "ConversionRateResponse", targetNamespace = "http://www.webserviceX.NET/", className = "ConversionRateResponse")
    public double conversionRate(
        @WebParam(name = "FromCurrency", targetNamespace = "http://www.webserviceX.NET/")
        Currency fromCurrency,
        @WebParam(name = "ToCurrency", targetNamespace = "http://www.webserviceX.NET/")
        Currency toCurrency
    );
}

エラーの原因を特定するにはどうすればよいですか? ここで何が間違っているのでしょうか?

エラー:

Warnung: Interceptor for {http://www.webserviceX.NET/}CurrencyConvertor#{http://www.webserviceX.NET/}ConversionRate has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unmarshalling Error: unerwartetes Element (URI:"http://www.webserviceX.NET/", lokal:"ConversionRateResult"). Erwartete Elemente sind <{}ConversionRateResult> 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:808)
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:629)
    at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:157)
    at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:103)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:800)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1592)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1490)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1309)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:133)
    at $Proxy35.conversionRate(Unknown Source)
    at CurrencyConvertorSoap_CurrencyConvertorSoap_Client.main(CurrencyConvertorSoap_CurrencyConvertorSoap_Client.java:50)
4

1 に答える 1

1

解決策は、自動生成されたを削除しないことでしたpackage-info.java。通常、通常の Java プロジェクトを作成する場合、このアーティファクトは問題なく削除できます。ただし、Web サービスの場合は、必須の定義が含まれています。

于 2013-07-11T12:37:51.610 に答える