gpt4 book ai didi

java - 将 CXF 与具有未发布元数据的 WSDL 结合使用

转载 作者:行者123 更新时间:2023-12-02 07:55:33 25 4
gpt4 key购买 nike

我正在使用 CXF 与 WCF 中创建的 WSDL 进行通信。 WCF 方面的事物是在 tutorial 之后创建的。 Java 代码是使用 Maven 脚本生成的。

我已经使用 HTTPS 进行加密了。我已经获得身份验证工作。但是,我希望在 WCF 端关闭 WSDL 元数据,并且仍然能够使用 Java 端与服务对话。

目前,我可以使用以下代码从 Java 端访问具有元数据发布功能的服务:

URL wsdlLocation = new URL("https://server.com:7010/Hservice?wsdl");
HttpsURLConnection connection = (HttpsURLConnection) wsdlLocation.openConnection();
HService service = new HService(wsdlLocation);
HAdminService calc = service.getHAdminService();
... (authentication using WSS4JOutInterceptor code and unrelated code here)
System.out.println(calc.add(new Double(5), new Double(5)));

但是,当我关闭 WCF 端的元数据发布时,我收到此错误:

Exception in thread "main" javax.xml.ws.WebServiceException:
org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:149)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:90)
at javax.xml.ws.Service.<init>(Service.java:56)
at com.blah.hservice.v_1_0.HService.<init>(HService.java:49)
at Main.main(Main.java:85)`

wsdl 所在的页面在元数据发布关闭的情况下显示此内容(这是摘录):

This is a Windows© Communication Foundation service.

Metadata publishing for this service is currently disabled.

If you have access to the service, you can enable metadata publishing by completing the following steps to modify your web or application configuration file:

我希望能够搜索“CXF 元数据未发布”并看到很多人这样做......但没有找到任何东西。在不发布 WSDL 的情况下如何与此服务通信?

最佳答案

你确实有两个选择:

  1. 将 wsdl 复制到本地并将客户端指向本地 wsdl。这可能是“最佳”选项,因为它确保使用 wsdl 中的所有信息(如策略等)。
  2. 对 wsdl 位置使用“null”(注意:JAX-WS 不可移植)。您需要在创建服务之后、调用 getHAdminService 之前调用 service.addPort(....) 以添加具有适当绑定(bind)和端点地址的端口。 CXF 在大多数情况下都可以在没有 WSDL 的情况下工作(将在内部生成注释所需的内容)。但是,如果 WSDL 中定义了诸如策略之类的内容,那么它就不能。

关于java - 将 CXF 与具有未发布元数据的 WSDL 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705061/

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