PC8*_*C84 5 java soap web-services jax-ws spring-boot
我有一个带有 cxf 的 Spring Boot SOAP 服务,我的消费者在 http 标头中向我传递 SSO 令牌。我能够使用 JAX-WS 处理程序检索 SSO 令牌。我正在将该 SSO 令牌保存到处理程序类级别变量中,并且在通过各种类进行控制之后,它到达了一个点,我必须向另一个服务发出请求并且必须传递相同的 SSO 令牌,但是在我的 Connection 类中,SSO令牌值为 NULL。
@Component
public class EndPointHandler implements SOAPHandler<SOAPMessageContext> {
private List<String> ssoToken;
private Map<String, List<String>> headers;
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean isResponse = (Boolean) context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!isResponse) {
headers = ((Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS));
if (headers != null) {
if (!headers.get("SSOToken").get(0).isEmpty()) {
List<String> ssoToken = headers.get("SSOToken");
LOGGER.info(ssoToken.get(0));
this.ssoToken = ssoToken;
} else {
LOGGER.error("SSO Token value cannot be empty");
return false;
}
}
}
return true;
}
public void setSSOToken() {
headers.put("SSOToken", this.ssoToken);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 Connection 类中,我必须将此 SSO 令牌设置为标头并调用另一个服务,但 SSO 令牌值为 NULL。
连接类:
@Component
public class ConnectionManager {
private static final Logger LOGGER = LoggerFactory.getLogger(ConnectionManager.class);
@Autowired
private EndPointHandler handler;
private void establishConnection(String uri) throws FileNetIntegrationException {
handler.ssoToken; // --> I need SSO token here but the value is NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在 WebServiceConfig 类中设置处理程序链的方式:
@Bean
public Endpoint endpoint(Bus bus) {
EndpointImpl endpoint = new EndpointImpl(bus, changeServiceEndpoint);
WebService ws = AnnotationUtils.findAnnotation(endpoint.getImplementorClass(), WebService.class);
endpoint.setAddress("/" + ws.serviceName());
endpoint.publish();
SOAPBinding binding = (SOAPBinding) endpoint.getBinding();
ArrayList<Handler> handlerChain = new ArrayList<>();
handlerChain.add(new EndPointHandler());
binding.setHandlerChain(handlerChain);
return endpoint;
}
Run Code Online (Sandbox Code Playgroud)
我想,当我注意到我在将其添加到处理程序链时使用了 new EndPointHandler() 时,我在此处发布最后一段代码后立即得到了一个解决方案。我尝试使用 Autowired 它,它对我有用。
| 归档时间: |
|
| 查看次数: |
732 次 |
| 最近记录: |