如何配置可配置的@WebServiceRef(wsdlLocation

时间:2014-11-10 19:29:18

标签: java maven annotations jax-ws wildfly-8

我正在使用一个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>

3 个答案:

答案 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位置。

     
      
  1. 生成JAX-WS工件并保存wsdl
  2.   
  3. 将服务引用指向本地wsdl
  4.   
  5. 在部署单元中包含wsdl
  6.   

答案 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>