2

CXF 2.7.5 を使用して Web サービスを呼び出しています。wsdl2java プログラム (コマンド ライン MSDOS および Maven) を使用してクライアント クラスを生成しました。jaxb (デフォルトのデータバインディング) ではエラーが発生し、サーバー側を変更できないため、xmlbeans データバインディングを使用する必要があります。したがって、xmlbeans databinding パラメータを使用すると、生成は問題ありません。

次のメソッドで Web メソッドを呼び出します。

WcfDemandService service = new WcfDemandService();
IWcfDemandService client = service.getBasicHttpBindingIWcfDemandService();
TODemand ticketToSubmit = TODemand.Factory.newInstance();

...

boolean ret = client.submit(ticketToSubmit);

webmethods を呼び出すと、単純な Java プログラムでは完全に動作しますが、ポートレットの liferay コンテキストでは動作しません: このエラーがあります (英語では、翻訳は org.tempuri.CheckConsistencyDocumen はインターフェイスであり、jaxb はインターフェイスを処理できません) ) :

09:48:33,899 エラー [http-bio-8080-exec-4][PortletServlet:115] javax.portlet.PortletException: com.sun.xml.ws.spi.db.DatabindingException: com.sun.xml.bind。 v2.runtime.IllegalAnnotationsException: 149 カウントの IllegalAnnotationExceptions org.tempuri.CheckConsistencyDocument est une interface et JAXB ne peut pas gérer les interfaces. この問題は次の場所に関連しています。この問題は、次の場所に関連しています。.TODemand est une インターフェイスと JAXB ne peut pas gérer les インターフェイス。この問題は、org.datacontract.schemas.x2004.x07 の場所に関連しています。.TODemand at public abstract org.datacontract.schemas.x2004.x07. * .TODemand org.tempuri.CheckConsistencyDocument$CheckConsistencyDocument$CheckConsistency.getEntity() at org.tempuri.CheckConsistencyDocument$CheckConsistency at public abstract org.tempuri.CheckConsistencyDocument$CheckConsistency org.tempuri.CheckConsistencyDocument.getCheckConsistency() at org.tempuri.CheckConsistencyDocument

このエラーは、多くのインターフェイスで繰り返されます。

このコードが liferay コンテキストで機能しない理由を知っていますか?

4

3 に答える 3

1

この場合、CXF を使用していません。スタック トレース (com.sun.xml.ws.spi....) は、CXF ではなく Metro を使用していることを示しています。クラスパスなどを調べて、実際に CXF を使用していることを確認してください。CXF を使い続けたい場合は、XMLBeans を使用できるようにする必要があります。(ただし、Blaise の JAXB ベースのソリューションを使用する方がよいでしょう)

于 2013-05-23T13:21:21.150 に答える
0

クラスが を使用して生成されたXmlBeans場合、CXF はすべての操作に JAXB デフォルトを使用するため、JaxWsProxyFactoryBeanを使用し、使用するように明示的に構成できます。XmlBeansDataBinding

JaxWsProxyFactoryBean factory = new org.apache.cxf.jaxws.JaxWsProxyFactoryBean();
factory.setServiceClass(YourServiceInterface.class);
factory.setDataBinding(new XmlBeansDataBinding()); 
factory.setAddress(endPoint);
factory.getInInterceptors().add(new org.apache.cxf.interceptor.LoggingInInterceptor());
factory.getOutInterceptors().add(new org.apache.cxf.interceptor.LoggingOutInterceptor());
于 2016-07-21T23:04:22.813 に答える