我一直在寻找这个问题的解决方案
我有一个 java 项目(我继承了它)。它本质上是 SOAP Web 服务的 RESTful 包装器。我不完全确定为什么除了他们在 PHP 连接到他们的 Web 服务时遇到问题之外,还创建了一个 Restful 服务,该服务作为客户端连接到 WS。
问题是 jax-ws 自动生成的 Web 服务工件/类被硬编码到本地路径作为编译项目的机器。这是在项目编译时由 jax-ws 自动生成的 java 文件中创建的注释示例。
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2.10-b140803.1500
* Generated source version: 2.2
*
*/
@WebServiceClient(
name = "flahImplService",
targetNamespace = "http://flah.com/",
wsdlLocation = "file:/C:/Users/WindowsUser/PathToNetBeansProjectFolder/flah.wsdl")
public class flahImplService
}
它似乎链接到在线 WSDL 并基于它构建文件。
我能找到的唯一重要的事情是/nbproject/jax-ws.xml 中有一个 xml,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jax-ws xmlns="http://www.netbeans.org/ns/jax-ws/1">
<services>
<service name="flahImplService">
<implementation-class>com.service.management.flahImplService</implementation-class>
<wsdl-url>https://blah.com/flah.wsdl</wsdl-url>
<wsdl-url>blah.com/flah.wsdl</wsdl-url>
我应该在哪里指定路径来替换这个自动生成和硬编码的本地 WSDL 位置?
编辑:顺便说一句,当我在本地运行这个项目时它当然可以工作,因为 wsdl 文件的路径是正确的,但是当部署到应用程序服务器时它失败了。
最佳答案
实际上你不应该使用生成的客户端...它只是为了测试。使用类似这样的东西来创建您的客户端:
import java.net.URL;
import javax.xml.ws.Service;
...
URL wsdlURL = new URL("http://localhost/hello?wsdl");
QName SERVICE_NAME = new QName("http://apache.org/hello_world_soap_http", "SOAPService");
Service service = Service.create(wsdlURL, SERVICE_NAME);
Greeter client = service.getPort(Greeter.class);
String result = client.greetMe("test");
关于java - 停止 jax-ws 创建本地绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26520187/