Java 将对象传递给SOAPHandler而不在JAX-WS中强制转换

Java 将对象传递给SOAPHandler而不在JAX-WS中强制转换,java,spring,soap,jax-ws,Java,Spring,Soap,Jax Ws,在客户端,我正在寻找一种方法,将对象传递给SOAPHandler,而不必将端口对象强制转换为BindingProvider来获取请求上下文。通常您会看到如下代码: Map<String,Object> requestContext = ((BindingProvider)port).getRequestContext(); requestContext.put("key", object); 我不喜欢强制转换,因为我正在使用Spring的AOP包装来自客户端端口对象的调用,而强制转

在客户端,我正在寻找一种方法,将对象传递给SOAPHandler,而不必将端口对象强制转换为BindingProvider来获取请求上下文。通常您会看到如下代码:

Map<String,Object> requestContext = ((BindingProvider)port).getRequestContext();
requestContext.put("key", object);

我不喜欢强制转换,因为我正在使用Spring的AOP包装来自客户端端口对象的调用,而强制转换会导致错误。

您使用的是Spring 2.5.6之前的版本吗?如果是这样,您可能只需要升级spring。这表明他们在版本2.5.6中添加了对BindingProvider接口的支持。

尝试将
BindingProvider
添加到端口类的接口列表中。此对象是生成的类,在本例中打包在另一个团队的.jar中。我不能改变它。只是想回答你的问题,你能提供一些简单的细节吗:你想传递什么类型的信息?业务数据,配置设置,内存状态?您是否知道大多数开发人员都可以避免SOAPHandler(SAAJ)的低级编程,而只通过JAX-WS生成代码?您是否有导致SAAJ的低级需求?:-)澄清:。。。SOAPHandler(通常直接使用SAAJ API)。。。引导您找到SOAPHandler/SAAJ?仍然需要强制转换,但距离足够近:)。确保使用Spring3.1允许我强制转换从JaxWsPortProxyFactoryBean生成的代理。
public boolean handleMessage(SOAPMessageContext context) {
    Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

    if (isRequest) {
        // Do stuff to SOAP header based on "object"
    }
    return true;
}