gpt4 book ai didi

java - 为每个服务请求添加 soap header

转载 作者:行者123 更新时间:2023-11-30 10:04:46 24 4
gpt4 key购买 nike

首先我会解释这个项目。它是一个集成 Web 服务,用于监听请求并在内部使用另一个 Web 服务并处理其响应以获得所需的答案。我需要为“内部”Web 服务的每个请求添加一个自定义 header 。我已经检查过使用下一个配置,处理程序是一个单例类。我需要对“内部服务”的每个新请求都创建一个新实例。我已经检查过,有时请求“A”的 header 正在使用请求“B”的值。我在第一个“内部”请求之前初始化 header 的值(我需要调用没有任何 soap header 的“内部”Web 服务的方法,然后使用第一个响应中包含的值进行设置).任何想法我怎样才能使这项工作?

谢谢

//ConfigurationClass

@Bean(name = "internalService")
@Scope(scopeName="prototype")


public JaxWsPortProxyFactoryBean internalService() {
JaxWsPortProxyFactoryBean bean = new JaxWsPortProxyFactoryBean();

try {
bean.setServiceInterface(internalService.class);
bean.setWsdlDocumentUrl(new URL("https://localhost/internalService.svc?wsdl" ));
bean.setNamespaceUri( "http://schemas.internalService.com/2019/04/");
bean.setServiceName("InternalService");
bean.setPortName("InternalServicePort");
bean.setEndpointAddress("https://localhost/internalService.svc");
bean.setHandlerResolver(wsHandlerResolver());

} catch (MalformedURLException e) {

e.printStackTrace();

}

return bean;

}
@Bean(name = "wsHandlerResolver")

public WebServiceHandlerResolver wsHandlerResolver() {
WebServiceHandlerResolver wshandlerResolver = new WebServiceHandlerResolver();
List handlers = new ArrayList();
handlers.add(webServiceHandler());
wshandlerResolver.setHandlers(handlers);
return wshandlerResolver;

}

 @Bean(name = "webServiceHandler")
public WebServiceHandler webServiceHandler() {
WebServiceHandler webServiceHandler = new WebServiceHandler();
return webServiceHandler;

}
//HandlerResolver class
public class WebServiceHandlerResolver implements HandlerResolver {

private List<Handler> handlers;

public List<Handler> getHandlerChain(PortInfo portInfo) {
return handlers;
}

public void setHandlers(List<Handler> handlers) {
this.handlers = handlers;
}
}
//Handler class
public class WebServiceHandler implements SOAPHandler<SOAPMessageContext> {

private String user;
private String pass;
private String source;

@Override
public boolean handleMessage(SOAPMessageContext context) {
//THIS IS WHERE I ADD THE VALUES
}

}

最佳答案

使用 java.lang.ThreadLocal<YourPropertiesHolder> WebServiceHandler 中的变量来存储和访问属性。这样来自您的服务的不同请求的属性就不会发生冲突。

class YourPropertiesHolder {
String user;
String pass;
String source;
}

关于java - 为每个服务请求添加 soap header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55706567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com