我们使用Spring和JAXWS生成的客户端类来访问weblogic部署的应用程序中的Web服务。定义Web服务的WSDL是远程和密码保护的(基本http身份验证)。在单元测试中,只需在〜/ .metro文件夹中定义代理,并使用访问它时使用的url和http密码。在某些配置文件中是否有类似的Weblogic技巧?或者还有其他一些解决这个问题的常用方法吗?
答案 0 :(得分:0)
根据文件(Chapter 6. Using Spring Web Services on the Client):
6.2.1.1.1. HTTP transports
有两种实现方式
WebServiceMessageSender
接口 通过HTTP发送消息。默认 实施是HttpUrlConnectionMessageSender
,哪个 使用Java提供的工具 本身。替代方案是CommonsHttpMessageSender
,使用 Jakarta Commons HttpClient。 使用 后者如果你需要更高级的话 和易于使用的功能(如 身份验证,HTTP连接 汇集等等。(...)
下面的例子说明了如何 覆盖默认配置, 并使用Commons Http来 使用HTTP进行身份验证 认证
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> <constructor-arg ref="messageFactory"/> <property name="messageSender"> <bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender"> <property name="credentials"> <bean class="org.apache.commons.httpclient.UsernamePasswordCredentials"> <constructor-arg value="john"/> <constructor-arg value="secret"/> </bean> </property> </bean> </property> <property name="defaultUri" value="http://example.com/WebService"/> </bean>
你试过这个吗?
更新:由于您使用的是JAX-WS客户端(这不是我从“我们使用Spring”中所理解的),您可以:
Authenticator
http-conf:authorization
元素配置conduit
。请参阅Client HTTP Transport (including SSL support). 答案 1 :(得分:0)
您可以提供自己的身份验证器。这样,如果WSDL本身受到基本HTTP身份验证的保护,它将起作用。
@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl")
static XxxService service;
public static void main(String[] args) {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "password".toCharArray());
}
});
service = new XxxService();
Xxx port = service.getXxxPort();
// invoke webservice and print response
XxxResponse resp = port.foo();
System.out.println(resp.toString());
}