Nous avons du mal à configurer notre application Web pour pouvoir nous connecter aux services Web via Spring WS. Nous avons essayé d'utiliser l'exemple de la documentation de Spring-WS côté client, mais nous nous retrouvons avec une exception WebServiceTransportException. La configuration XML ressemble à ceci:WebServiceTransportException: non autorisé [401] dans Spring-WS
<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>
Nous avons été en mesure de configurer l'application par programme, mais cette configuration n'a pas été possible de « transférer » à une configuration XML Spring parce que certains organismes de normalisation n'utilisent le format Spring attend. (HttpState.setCredentials (...) prend deux paramètres). La config a été levée à partir d'un autre code client Spring-WS dans la société.
Ceci est la configuration qui fonctionne:
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;
}
Est-ce que quelqu'un sait comment résoudre mon problème? Chaque tutoriel que j'ai vu là-bas répertorie la première configuration. Il semble que quand je mets les informations d'identification sur l'objet messageSender, ils sont tout simplement ignorés ...
Quand il est spécifié comme ci-dessus, Spring distingue arguments du constructeur par ordre d'apparition. La notation basculerait seulement entre la définition des attributs par le constructeur et leur définition par l'accesseur. J'ai peur, cela ne changera rien. –