如果存在,如何在调用Web服务时忽略wsit-client.xml

时间:2013-04-05 15:00:18

标签: web-services soap jax-ws wsimport wsit

我正在处理的应用程序调用许多webservice。就在最近,我整合了另一个需要wsit-client.xml进行Soap身份验证的Web服务。

现在正在运行,但所有其他SOAP服务都已停止工作。

每当调用其中任何一个时,我都会看到像

这样的消息
INFO: WSP5018: Loaded WSIT configuration from file: jar:file:/opt/atlasconf/atlas.20130307/bin/soap-sdd-1.0.0.jar!/META-INF/wsit-client.xml.

我怀疑这是导致服​​务调用失败的原因。

如何在某些soap服务调用中忽略wsit-client.xml?

由于

1 个答案:

答案 0 :(得分:2)

通过使用Container和Loader为wsit-client.xml配置动态位置来解决此问题。这样它就不会自动加载。为此,我首先为应用程序实现了一个Container,如下所示

public class WsitClientConfigurationContainer extends Container {
private static final String CLIENT_CONFIG = "custom/location/wsit-client.xml";

private final ResourceLoader loader = new ResourceLoader() {
    public URL getResource(String resource) {
        return getClass().getClassLoader().getResource(CLIENT_CONFIG);
    }
};

@Override
public <T> T getSPI(Class<T> spiType) {
    if (spiType == ResourceLoader.class) {
        return spiType.cast(loader);
    } 
    return null;
}    

}

然后在代码中使用它我这样做

        URL WSDL_LOCATION = this.getClass().getResource("/path/to/wsdl/mysvc.wsdl");

    WSService.InitParams initParams = new WSService.InitParams();
    initParams.setContainer(new WsitClientConfigurationContainer());
    secGtwService = WSService.create(WSDL_LOCATION, SECGTWSERVICE_QNAME, initParams);

它就像魔法一样