代码之家  ›  专栏  ›  技术社区  ›  Farouk Alhassan

如何在调用web服务时忽略wsit-client.xml(如果存在)

  •  0
  • Farouk Alhassan  · 技术社区  · 13 年前

    我正在开发的应用程序调用了许多Web服务。就在最近,我集成了另一个需要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.
    

    我怀疑这就是导致服务呼叫失败的原因。

    如何使wsit-client.xml对于某些soap服务调用被忽略?

    谢谢

    1 回复  |  直到 13 年前
        1
  •  2
  •   Farouk Alhassan    13 年前

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

    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);
    

    它就像魔术一样