2014-11-10 6 views
0

Я имею Maven сборки и проект с клиентом WebService, который будет развернут на сервере wildfly. В моем клиента EJB, я следующийКак иметь конфигурируемый @WebServiceRef (wsdlLocation

@Stateless 
public class MyClientEJB { 

    @WebServiceRef(wsdlLocation = "http://localhost:8080/HelloWorld/HelloWorldService?wsdl") 
    private HelloWorldService service; 

Я хочу, чтобы у меня был другой URL-адрес для тестирования и производства, как я могу получить этот URL-адрес в качестве настраиваемой записи. Я пробовал создавать профили в моем файле 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."); 
    } 
} 

Любой пример будет оценена. Благодаря

Обновление:

Я добавил папку под WSDL Src/основной/ресурсы/META_INF и скопировать файл WSDL там. В @WebServiceRef аннотацию затем обновлен до @WebServiceRef (wsdlLocation = "META-INF/WSDL/HelloWorld.wsdl")

Но я получаю следующее сообщение об ошибке во время выполнения, когда вебсервис вызывается.

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

ли вы добавить его в 'META-INF' или' META-INF/wsdl'? Имейте в виду, что файл должен быть доступен из класса. – Hannes

+0

Попробуйте с ведущими /. Я думаю, что 'META_INF' - это просто опечатка. – Hannes

ответ

0

Вы не можете иметь динамические строки в аннотации.

Но вы можете использовать @WebServiceRef(wsdlLocation = "META-INF/wsdl/service.wsdl") и использовать профили maven для копирования нужного файла в это место.

+0

Спасибо за ответ. Пожалуйста, см. Мое обновление выше, у меня все еще есть проблемы –

+0

Конечно, вы можете иметь динамический текст в аннотациях. В этом весь смысл EL – kolossus

+0

@kolossus http://stackoverflow.com/questions/2522746/dynamic-class-annotation – Hannes

0

Согласно http://victor-ichim.blogspot.com/2012/02/dynamic-wsdl-location-with-jax-ws.html правильный подход заключается в следующем:

Закрепить расположение WSDL, сохраняя контракт на местном уровне.

  1. Генерация артефактов JAX-WS и сохранить WSDL-
  2. Направьте ссылку на службу к местному WSDL
  3. Включите WSDL в блоке развертывания
0

Я решил эту проблему. Поместите 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> 
+0

Пожалуйста, повторно отредактируйте свой ответ, вместо того чтобы поместить часть ответа в комментарий. Ответы легче форматировать. – Daniel

Смежные вопросы