为了账号安全,请及时绑定邮箱和手机立即绑定

为每个服务请求添加soap标头

为每个服务请求添加soap标头

摇曳的蔷薇 2022-10-07 16:40:39
首先,我将解释该项目。它是一个集成 Web 服务,它侦听请求并在内部使用另一个 Web 服务并处理其响应以获得所需的答案。我需要为“内部”Web 服务的每个请求添加一个自定义标头。我已经检查过使用下一个配置,处理程序是一个单例类。我需要对“内部服务”的每个新请求都创建一个新实例。我检查过有时请求“A”的标头使用请求“B”的值。我在第一个“内部”请求之前初始化标头的值(我需要调用没有任何soap标头的“内部”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 classpublic class WebServiceHandlerResolver implements HandlerResolver {    private List<Handler> handlers;    public List<Handler> getHandlerChain(PortInfo portInfo) {        return handlers;    }
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2022-10-07
?
开满天机

TA贡献1786条经验 获得超13个赞

最后我能够做到。这只是 Handler 类中范围请求的问题,我缺少 proxyMode 选项。

@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)


查看完整回答
反对 回复 2022-10-07
  • 2 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号