使用生成的代码,是否wsimport可以覆盖服务端点而无需重新生成代码?
我写了一个简单的java webservice,以下是步骤:
wsimport http://localhost:8080/service/helloservice?Wsdl问题是服务是部署在8080以外的端口上运行的应用服务器上,客户端和服务之间的通信永远不会发生.我想知道在客户端使用的存根中创建没有服务器和端口硬编码的存根的最佳方法是什么.
我pom.xml包含以下内容,为具有下面指定的WSDL的工作Web服务自动生成客户端:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>generate-sources</id>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/myclient.wsdl</wsdl>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
<wsdlLocation>wsdl/myclient.wsdl</wsdlLocation>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
项目构建正常,没有任何错误或警告,我可以在文件夹myclient.wsdl下的JAR文件中看到该wsdl文件.
但是当我尝试运行那个JAR时:
java -Xmx1028m -jar myclient-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
它抱怨"无法从wsdl/myclient.wsdl初始化默认的wsdl"
为什么?
我错过了什么?
我如何找出什么路径是wsdl/myclient.wsdl在pom.xml中转化为,使客户的JAR抱怨在运行时?
更新:我知道一些涉及修改自动生成代码的解决方案/解决方法:
但是我更感兴趣的是一个解决方案,需要输入正确的值pom.xml类似于类路径方法(但遗憾的是,由于某种原因,类路径不适合我).
相反,我应该在那里打字的任何想法?显然,这是一个非常简单的例子,可以找出该特定插件的正确路径规则,但我遗漏了一些东西而且我不知道它是什么.
我正在使用该jaxws-maven-plugin版本2.1.我发现从jar资源为WSDL位置生成了非常奇怪的代码:
<configuration>
<keep>true</keep>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
<extension>true</extension>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<packageName>my.package.gen</packageName>
<wsdlLocation>wsdl/*</wsdlLocation>
<wsdlFiles>
<wsdlFile>mywsdl.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
Run Code Online (Sandbox Code Playgroud)
生成的代码是:
static {
URL url = null;
try {
URL baseUrl;
baseUrl = my.package.gen.My_Service.class.getResource(".");
url = new URL(baseUrl, "wsdl/mywsdl.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
MYSERVICE_WSDL_LOCATION = url; }
Run Code Online (Sandbox Code Playgroud)
所以wsdl文件在目录(包)中查找生成的类居民,而不是在主jar目录中,因为这是合乎逻辑的.并且无法找到WSDL.
它是一个错误jaxws-maven-plugin,还是我配置中的错误?
在我的应用程序中,我使用了许多Web服务.由于WSDL没有改变,我已经在我的项目中集成了WSDL文件.如果我使用来自CXF的WSDL2Java工具,则WSDL位置绝对路径是硬编码的.
现在我的问题是,如何将@WebserviceClient Annotation中的"wsdlocation"参数更改为相对路径?
这是一个例子:
@WebServiceClient(name = "Time",
wsdlLocation = "file:/C:/Users/dominik/Documents/NetBeansProjects/Webservices/src/wsdl/Time.wsdl" ) /*I want this path to be relative */
public class Time extends Service {
Run Code Online (Sandbox Code Playgroud)