У меня есть метод, который должен вернуть мне токен, используя Apache CXF:
private static STSClient getSTSClientToken() throws Exception {
Bus bus = BusFactory.newInstance().createBus();
BusFactory.setThreadDefaultBus(bus);
STSClient sts = new STSClient(bus);
QName serviceQName = new QName("namespace", "service_name");
QName endpointQName = new QName("namespace", "port");
sts.setServiceQName(serviceQName);
sts.setEndpointQName(endpointQName);
sts.setWsdlLocation("wsdlLocation");
sts.setEnableAppliesTo(false);
sts.setSecureConv(true);
sts.setSendRenewing(false);
sts.setSoap12();
sts.setKeySize(256);
sts.setWspNamespace("http://schemas.xmlsoap.org/ws/2004/09/policy");
sts.getRequestContext().put("ws-security.username.sct", USERNAME);
sts.getRequestContext().put("ws-security.password.sct", PASSWORD);
SecurityToken token = sts.requestSecurityToken("appliesTo", "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT", "/Issue", null);
return sts;
}
Но я получаю это исключение обратно:
org.apache.cxf. Перехватчик. Ошибка: не удалось отправить сообщение. в org.apache.cxf.interceptor.MessageSenderInterceptor $ MessageSenderEndingInterceptor.handleMessage (MessageSenderInterceptor.java:67) в org.apache.cxf.phase.PhaseInterceptorChain.doIntercept (PhaseInterceptorCape.limp.lig.lig.lig.lig.in_g_t_t_t_t_t_t_t_t_t_t_t_t_t_t_).doInvoke (ClientImpl.java:530) в org.apache.cxf.endpoint.ClientImpl.invoke (ClientImpl.java:441) в org.apache.cxf.endpoint.ClientImpl.invoke (ClientImpl.java:356) в орг. apache.cxf.endpoint.ClientImpl.invoke (ClientImpl.java:314) в org.apache.cxf.ws.security.trust.AbstractSTSClient.issue (AbstractSTSClient.java:876) ....
Это не очень помогает, кто-то может указать, что здесь не так?
Другое дело, что когда я вижу, что сообщение выходит в Wireshark, SOAPBody в SOAPEnvelope пуст. Я не понимаю, как это пусто, когда я отлаживаю его объект записи в AbstractSTSClient, он имеет фактическое сообщение в нем.