Я настроил аутентификацию имени пользователя и пароля Ws-Security в моем проекте SOAP.Теперь, когда я выполняю запрос в интерфейсе SOAP, я получаю исключение:
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring xml:lang="en">No WS-Security header found</faultstring>
В SoapClientConfig.java у меня есть
public class SoapClientConfig {
@SuppressWarnings("deprecation")
@Bean
public Wss4jSecurityInterceptor securityInterceptor(){
@SuppressWarnings("deprecation")
Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor();
wss4jSecurityInterceptor.setSecurementActions("Timestamp UsernameToken");
wss4jSecurityInterceptor.setSecurementUsername("admin");
wss4jSecurityInterceptor.setSecurementPassword("secret");
return wss4jSecurityInterceptor;
}
@Bean
public Jaxb2Marshaller getMarshaller(){
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("org.onewallet.webservices.disburse");
return marshaller;
}
@Bean
public SoapConnector createLoanClient(){
SoapConnector soapConnector = new SoapConnector();
soapConnector.setMarshaller(getMarshaller());
soapConnector.setUnmarshaller(getMarshaller());
soapConnector.setDefaultUri("http://localhost:8080/soapws/disburse");
ClientInterceptor[] interceptors = new ClientInterceptor[] {securityInterceptor()};
soapConnector.setInterceptors(interceptors);
return soapConnector;
} }
RunClient.java
public class RunClient {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SoapClientConfig.class);
System.out.println(context.getBeanDefinitionCount());
SoapConnector soapConnector = context.getBean(SoapConnector.class);
CreateLoanRequest request = new CreateLoanRequest();
request.setLoanStatus(100);
CreateLoanResponse resp = soapConnector.createLoan(request);
System.out.println("response: " + resp);
} }
LoanEndpoint.java
@Endpoint
public class LoanEndpoint {
private static final String NAMESPACE_URI = "http://www.onewallet.org/webservices/disburse";
@Autowired
private ILoanService loanService;
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "createLoanRequest")
@ResponsePayload
public CreateLoanResponse createLoan(@RequestPayload CreateLoanRequest request) {
CreateLoanResponse response = new CreateLoanResponse();
ServiceStatus serviceStatus = new ServiceStatus();
Loan loan = new Loan();
loan.setLoanStatus(request.getLoanStatus());
loan.setExternalId("B9076");
return response; }
Я обновил свое определение WSDL в последующих обменах SoapUI, но мой запрос не показывает добавленные мной заголовки Wss4jSecurityInterceptor.Что-то еще, что я должен настроить в SOAPUI?Или мне не хватает какой-то другой конфигурации в моем сервисе SOAP