CXF を使用して Web サービス クライアントを作成および実行するためのコードをいくつか書きました。.wsdl ファイルからクライアントを作成するために JaxWsClientFactoryBean を使用しました (これが最適なソリューションかどうかはわかりません)。ここでの目標は、Spring などを回避してプログラムでこれを行うことでした。Java と CXF を使用した純粋なコードです。
JaxWsClientFactoryBean cfb = new JaxWsClientFactoryBean();
cfb.setAddress(getServiceProperty(intClass, PROPERTY_KEY_URL_SUFFIX));
cfb.setServiceClass(intClass);
cfb.setOutInterceptors(getOutInterceptors(intClass));
cfb.setServiceName(SERVICE_NAME);
cfb.setWsdlURL("classpath:wsdl/" + intClass.getSimpleName() + ".wsdl");
cfb.setEndpointName(ENDPOINT_NAME);
Client client = cfb.create();
ClientProxy cp = new ClientProxy(client);
I intService = (I)
Proxy.newProxyInstance(intClass.getClassLoader(), new Class[] { intClass }, cp);
これが正しく行われたかどうかはよくわかりませんが、このコードをローカルで実行し、Tomcat にデプロイすると機能します。
残念ながら、Weblogic でこのコードを実行する必要があるため、奇妙な例外が発生します。
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was
made to insert a node where it is not permitted.
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:235)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186)
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92)
... 26 more
Caused by: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted.
at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:356)
at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284)
at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:399)
at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1019)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:939)
at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:866)
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:226)
... 28 more
これは、アプリケーションの展開中に発生します。.wsdl ファイルに何か問題があるようですが、待ってください... Tomcat で動作していました。
JRockit VM と標準の JVM を使用する Weblogic 内の com.sun.org.apache.xerces.* クラスの実装に多少の違いがあると思いますが、それを解決する方法がわかりません。
クライアント作成のさまざまな方法を試すのに何時間も費やしました。それらのほとんどはローカルおよび Tomcat で動作しましたが、WebLogic では動作しませんでした。
次に何を試すべきかヒントはありますか?私はこのトピックにちょっとうんざりしています:D