Spring WS を介して Web サービスに接続できるように Web アプリを構成するのに苦労しています。クライアント側 Spring-WS のドキュメントの例を使用しようとしましたが、最終的に WebServiceTransportException が発生します。XML 構成は次のようになります。
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory"/>
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender">
<property name="credentials">
<bean class="org.apache.commons.httpclient.UsernamePasswordCredentials">
<constructor-arg value="john"/>
<constructor-arg value="secret"/>
</bean>
</property>
</bean>
</property>
</bean>
アプリケーションをプログラムで構成することはできましたが、一部のセッターが Spring が期待する形式を使用しなかったため、この構成を Spring XML 構成に「転送」することはできませんでした。(HttpState.setCredentials(...) は 2 つのパラメーターを取ります)。構成は、社内の他の Spring-WS クライアント コードから持ち上げられました。
これは機能する構成です。
public List<String> getAll() {
List<String> carTypes = new ArrayList<String>();
try {
Source source = new ResourceSource(request);
JDOMResult result = new JDOMResult();
SaajSoapMessageFactory soapMessageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance());
WebServiceTemplate template = new WebServiceTemplate(soapMessageFactory);
HttpClientParams clientParams = new HttpClientParams();
clientParams.setSoTimeout(60000);
clientParams.setConnectionManagerTimeout(60000);
clientParams.setAuthenticationPreemptive(true);
HttpClient client = new HttpClient(clientParams);
client.getState().setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("username", "password"));
CommonsHttpMessageSender messageSender = new CommonsHttpMessageSender(client);
template.setMessageSender(messageSender);
template.sendSourceAndReceiveToResult(SERVICE_URI,
source, result);
// Handle the XML
} catch (IOException e) {
throw new RuntimeException(e);
} catch (SOAPException e) {
throw new RuntimeException(e);
}
return carTypes;
}
私の問題を解決する方法を知っている人はいますか?私が目にしたすべてのチュートリアルには、最初の構成がリストされています。messageSender オブジェクトに資格情報を設定すると、それらは無視されるようです...