在调用Web服务时访问Weblogic中受密码保护的WSDL

时间:2010-07-05 14:50:16

标签: web-services ssl wsdl weblogic jax-ws

我们使用Spring和JAXWS生成的客户端类来访问weblogic部署的应用程序中的Web服务。定义Web服务的WSDL是远程和密码保护的(基本http身份验证)。在单元测试中,只需在〜/ .metro文件夹中定义代理,并使用访问它时使用的url和http密码。在某些配置文件中是否有类似的Weblogic技巧?或者还有其他一些解决这个问题的常用方法吗?

2 个答案:

答案 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”中所理解的),您可以:

答案 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());

}