gpt4 book ai didi

java - 使用 WSDL 生成客户端代码后如何摆脱 WSDL 依赖性?

转载 作者:行者123 更新时间:2023-11-30 07:37:43 27 4
gpt4 key购买 nike

我使用 wsimport 从 WSDL 文件生成客户端代码,我已成功测试此生成的代码并且它可以工作,但有一个问题,该代码像这样引用 WSDL 文件,

static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.spx.global.spf_wmis_dev.etq2sapintegration_zqm246f_etq_validate_matnr_webservice.matnr_provider.ETQ2SAPIntegrationZQM246FETQVALIDATEMATNRWebServiceMATNRProvider.class.getResource(".");
url = new URL(baseUrl, "file:/C:/Users/xx/Desktop/spx/wsdls/validate_MATNR.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'file:/C:/Users/xx/Desktop/spx/wsdls/validate_MATNR.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
ETQ2SAPINTEGRATIONZQM246FETQVALIDATEMATNRWEBSERVICEMATNRPROVIDER_WSDL_LOCATION = url;
}

我已经使用在http://localhost:8088/validate上运行的soapUI为该WSDL文件创建了一个模拟服务,如果我在WSDL文件中使用这个确切的URL,就像这样,一切正常就好了。

<wsdl:port name="ETQ2SAPIntegration_ZQM246F_ETQ_VALIDATE_MATNR_WebService_MATNR_provider_Port" binding="tns:ETQ2SAPIntegration_ZQM246F_ETQ_VALIDATE_MATNR_WebService_MATNR_provider_Binder">
<soap:address location="http://localhost:8088/validate"/>
</wsdl:port>

现在我希望能够在不引用 WSDL 文件的情况下指定 Web 服务位置,我尝试了很多方法,例如覆盖端口 endPointAddress,

ETQ2SAPIntegrationZQM246FETQVALIDATEMATNRWebServiceMATNRProvider ser= new ETQ2SAPIntegrationZQM246FETQVALIDATEMATNRWebServiceMATNRProvider(); this class extends the Service class
javax.xml.namespace.QName qn= new QName("http://SPF-WMIS-DEV.GLOBAL.SPX.COM/ETQ2SAPIntegration.ZQM246F_ETQ_VALIDATE_MATNR.WebService:MATNR_providera", "ETQ2SAPIntegration.ZQM246F_ETQ_VALIDATE_MATNR.WebService.MATNR_provider");
ser.addPort(qn,HTTPBinding.HTTP_BINDING, "http://localhost:8088/test");
ZQM246FETQVALIDATEMATNRResponse response = new ZQM246FETQVALIDATEMATNRResponse();
MATNRProviderPortType provider = ser.getETQ2SAPIntegrationZQM246FETQVALIDATEMATNRWebServiceMATNRProviderPort();

但是无论我尝试什么,代码都会继续尝试从 WSDL 文件中读取 endPointAddress,也许我想做的事情是不可行的,这意味着我不能只是删除 WSDL 文件,我不确定在这一点上,所以任何建议都会很有帮助。

P.S:不要怪我不遵守 Java 命名约定,我和你一样讨厌它。

最佳答案

您可以像这样更改请求上下文(为了更好的可读性,我缩短了服务和提供商的名称):

String address = "http://localhost:8088/validate";
BlaBlaWebService service = new BlaBlaWebService();
BlaBlaProviderPort provider = ser.getBlaBlaProviderPort();
if (provider instanceof BindingProvider) {
BindingProvider bindProvider = (BindingProvider)provider;
bindProvider.getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY, address);
} else {
//log or fail if you want
}

关于java - 使用 WSDL 生成客户端代码后如何摆脱 WSDL 依赖性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35156339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com