java - 停止 jax-ws 创建本地绝对路径

标签 java web-services rest jax-ws

我一直在寻找这个问题的解决方案

我有一个 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");

也看看Spring cxf client configuration

关于java - 停止 jax-ws 创建本地绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26520187/

相关文章:

java - jmeter中soap web服务的xpath断言

java - 如何在 Android 中使用 Java 从服务数据中提取的字符串中删除双引号?

c# - 如何增加 Http Post 中的项目大小

java - 调用可变参数方法的速度

java - 比较一个类的两个列表而不迭代列表

web-services - RESTful Web 服务中的身份验证

java - 自定义 Jersey 错误处理,如何在客户端捕获响应?

rest - 意外路径变量类型为400 vs 404

Java 私有(private)构造函数可见性

Java - 将用户输入放入数组中