不是100%肯定,因为该问题缺少一些详细信息,但是如果您使用的是JAX-WS
RI,请查看发送请求时添加SOAP标头:
进行此操作的可移植方法是您创建一个
SOAPHandlerSAAJ并与之混淆,但是RI提供了一种更好的方法。创建代理或调度对象时,它们将实现
BindingProvider接口。使用JAX-WS RI时,您可以向下转换到WSBindingProvider它,以定义仅由JAX-WS RI提供的更多方法。该接口允许您设置任意数量的Header对象,每个对象代表一个SOAP标头。如果需要,您可以自己实现它,但是很可能您会使用在
Headers类中定义的工厂方法
之一来创建一个。
> import com.sun.xml.ws.developer.WSBindingProvider;> > HelloPort port = helloService.getHelloPort(); // or something like> that...> WSBindingProvider bp = (WSBindingProvider)port;> > bp.setOutboundHeader(> // simple string value as a header, like> <simpleHeader>stringValue</simpleHeader>> Headers.create(new QName("simpleHeader"),"stringValue"),> // create a header from JAXB object> Headers.create(jaxbContext,myJaxbObject)> );相应地更新您的代码,然后重试。并且,如果您不使用JAX-WS RI,请更新您的问题并提供更多上下文信息。
更新: 似乎您要调用的Web服务已通过WS-Security /
UsernameTokens保护。这与您最初提出的问题有些不同。无论如何,要配置您的客户端发送用户名和密码,我建议查看一下很棒的文章,为基于Metro的Web服务实现WS-Security UsernameToken Profile(跳至步骤4)。使用NetBeans进行此步骤可能会大大简化工作。



