我正在使用一个maven构建和项目,其中一个Web服务客户端将部署在一个wildfly服务器上。 在我的客户端EJB中,我有以下
@Stateless
public class MyClientEJB {
@WebServiceRef(wsdlLocation = "http://localhost:8080/HelloWorld/HelloWorldService?wsdl")
private HelloWorldService service;
我想为测试和制作提供不同的网址,如何将此网址作为可配置条目。我尝试在我的pom.xml文件中创建配置文件,但这需要以下代码,我不知道如何在@WebServiceRef注释中使用它。
private void initProperties() {
InputStream is = getClass().getClassLoader().getResourceAsStream("application.properties");
if (is != null) {
try {
properties.load(is);
BASE_URL = (String)properties.getProperty("student.restws.url");
} catch (IOException e) {
logger.error("Error when reading properties: ", e);
throw new RuntimeException("Can not load application.properties file.");
}
} else {
logger.error("Error when finding application.properties.");
throw new RuntimeException("Error when finding application.properties.");
}
}
任何例子都将不胜感激。感谢
更新
我在src / main / resources / META_INF下添加了wsdl文件夹并在那里复制了wsdl文件。 在@WebServiceRef注释中然后更新为 @WebServiceRef(wsdlLocation =“META-INF / wsdl / HelloWorld.wsdl”)
但是当调用webservice时,我得到以下运行时错误。
Caused by: java.io.IOException: JBAS015526: Child 'META-INF/wsdl/HelloWorld.wsdl' not found for VirtualFile: "/C:/wildfly-8.1.0.Final/bin/content/hello-world.war"
wsdl文件定义如下:
<wsdl:service name="HelloWorldService">
<wsdl:port name="HelloWorldPort" binding="tns:HelloWorldEndpointBinding" >
<soap:address location="http://localhost:9090/HelloWorldPort"/>
</wsdl:port>
</wsdl:service>
答案 0 :(得分:0)
注释中不能包含动态字符串。
但您可以使用@WebServiceRef(wsdlLocation = "META-INF/wsdl/service.wsdl")
并使用maven个人资料将正确的文件复制到此位置。
答案 1 :(得分:0)
根据http://victor-ichim.blogspot.com/2012/02/dynamic-wsdl-location-with-jax-ws.html,正确的方法是:
通过在本地保存合同来修复wsdl位置。
- 生成JAX-WS工件并保存wsdl
- 将服务引用指向本地wsdl
- 在部署单元中包含wsdl
醇>
答案 2 :(得分:-1)
我解决了这个问题。将beans.xml
添加到webapp/WEB-INF
beans.xml
内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="java.sun.com/xml/ns/javaee";
xmlns:xsi="w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="java.sun.com/xml/ns/javaee java.sun.com/xml/ns/javaee/beans_1_0.xsd">;
</beans>