Как добавить пользовательский заголовок на весеннем мыльном клиенте
Привет я хотел бы добавить заголовок к Spring мыло клиента, и у меня есть класс ClientAppConfig, как показано ниже;
@Configuration
public class ClientAppConfig {
@Bean
public Wss4jSecurityInterceptor wss4jSecurityInterceptor() {
Wss4jSecurityInterceptor interceptor = new Wss4jSecurityInterceptor();
interceptor.setSecurementActions("Timestamp");
interceptor.setSecurementUsername("user");
interceptor.setSecurementPassword("*******");
return interceptor;
}
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan("com");
return marshaller;
}
@Bean
public SomeClient someClient(Jaxb2Marshaller marshaller) {
SomeClient client = new SomeClient();
client.setDefaultUri("http://test");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
}
Пример клиента:
@Component
public class SomeClient extends WebServiceGatewaySupport {
public SomeResponse someMethod(ArrayOfLong arrayOfLong) {
SomeRequest request = new SomeRequest();
request.setsomeId(arrayOfLong);
SomeResponse response = (SomeResponse) getWebServiceTemplate()
.marshalSendAndReceive(request, new SoapActionCallback(
"http://soapaction"));
return response;
}
}
И у меня есть запрос wsdl, как это;
<soapenv:Envelope xmlns:soapenv="http://envelope" xmlns:v1="http://Service">
<soapenv:Header xmlns:as="http://Schema">
<wsse:Security xmlns:wsse="http://wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>user</wsse:Username>
<wsse:Password>********</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<as:consumerContext xsi:type="as:IntWebAppContextType" xmlns:as="http://Schema" xmlns:xsi="http://XMLSchema-instance">
<consumerCode>someCode</consumerCode>
</as:consumerContext>
</soapenv:Header>
<soapenv:Body>
<v1:someReceived xmlns:ns3="http://Service" xmlns:ns2="http://Schema">
<v1:parameters>
<!--Optional:-->
<v1:someId>
<!--Zero or more repetitions:-->
<v1:long>111111111</v1:long>
</v1:someId>
</v1:parameters>
</v1:someReceived>
</soapenv:Body>
</soapenv:Envelope>
Я добавил имя пользователя и пароль, но я должен добавить as:consumerContext
раздел, мне нужно получить customerCode для получения ответа, в противном случае я получаю ошибку. Как я могу получить customerCode с весны ws
1 ответ
Если вы генерируете классы JAVA, используя wsimport
в окнах, как:
wsimport -keep -verbose http://compA.com/ws/server?wsdl
Ты получишь ConsumerContext.java
сгенерированный, который вы можете заполнить с действительными данными, установите его в Header.java
с помощью setConsumerContext(ConsumerContext obj)
и уволить запрос.
Подобную реализацию вы можете найти здесь - написание-и-потребление-мыла-веб-службы-с-пружиной с исходным кодом на GitHub.