我正在使用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,我如何与此服务进行通信?
答案 0 :(得分:2)
你真的有两个选择:
答案 1 :(得分:0)
我使用CXF 2.6.5生成的客户端代码
确保QName(第一个参数)与getHAdminService()方法引用的QName匹配。 bindingId(第二个参数)应该是SOAPBinding Interface(javax.xml.ws.soap.SOAPBinding)中定义的常量之一。