.net SOAP JavaからのWebサービスを呼び出したい。netサービスにはws-securityモジュールがあり、ユーザー名とパスワード(および後でX.509証明書)の設定にApacheCXFを使用しました。私が使用したコードは次のとおりです。
ITaxOrganService wsHttpBindingITaxOrganService = new TaxOrganService().getWSHttpBindingITaxOrganService();
Endpoint endpoint = ClientProxy.getClient(wsHttpBindingITaxOrganService).getEndpoint();
Map<String,Object> outProps = new HashMap<>();
outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER,"*****");
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ShahrdariPasswordCallback.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
endpoint.getOutInterceptors().add(wssOut);
PermissionPrintDS permissionPrintDS = wsHttpBindingITaxOrganService.providePermissionInfoByPermNo(10000198);
しかしJava最後の行に例外をスローします:
Caused by: Java.lang.RuntimeException: Could not find conduit initiator for address: http://urbanservices.iri/Services/xxyzService/xxyzService.svc and transport: http://schemas.xmlsoap.org/soap/http
at org.Apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransportFactory.Java:224) ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
at org.Apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransportFactory.Java:229) ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.AbstractConduitSelector.createConduit(AbstractConduitSelector.Java:145) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.Java:107) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.UpfrontConduitSelector.prepare(UpfrontConduitSelector.Java:63) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.ClientImpl.prepareConduitSelector(ClientImpl.Java:853) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.Java:511) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:425) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:326) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:279) ~[cxf-core-3.1.0.jar:3.1.0]
at org.Apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.Java:96) ~[cxf-rt-frontend-simple-3.1.0.jar:3.1.0]
at org.Apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.Java:139) ~[cxf-rt-frontend-jaxws-3.1.0.jar:3.1.0]
at com.Sun.proxy.$Proxy144.providePermissionInfoByPermNo(Unknown Source) ~[na:na]
私に何ができる?
Javaプロジェクトでも同じ問題が発生しました。
まず、pom.xmlには次のCXF依存関係しかありませんでした。
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
その後、2つのCXF依存関係を追加しました。
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
完全なpom.xml:
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.atatorus</groupId>
<artifactId>bookclient</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<cxf.version>2.2.3</cxf.version>
</properties>
<dependencies>
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.Apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
</dependency>
</dependencies>
</project>
この構成は、私のプロジェクトが正しく機能するのに役立ちました。