Веб-службы Java - определение местоположения сервера - PullRequest
2 голосов
/ 08 июня 2011

У меня есть одно последнее препятствие, чтобы покончить с приложением веб-служб, с которым я работаю;Мне нужно иметь возможность переопределить настройки по умолчанию, используемые для установки местоположения схемы и адреса мыла в сгенерированном файле WSDL.

При развертывании приложения (GlassFish v2.1 в Red Hat linux) оно использует имя локального сервера в URL-адресах, но вместо этого ему нужно использовать имя публичного домена.Я смог сохранить файл WSDL локально, изменить URL-адреса, сделать его общедоступным, сгенерировать тестовое приложение извне из файла и, наконец, смог успешно запустить тест.

Теперь я отправился в царствопользовательских привязок JAX-WS, но я надеюсь, что я либо упустил более простое решение, либо привязки не так сложны, как кажется на первый взгляд.Реализация веб-службы осуществляется через EJB без сохранения состояния (например, MyWS.java ниже).Сгенерированный файл WSDL будет выглядеть как MyWSDL.wsdl (см. Ниже).

В теге xsd: import мне нужно изменить schemaLocation на

    http://test.mycompany.com/MyWSService/MyWS?xsd=1 

вместо

    http://local-server-name/MyWSService/MyWS?xsd=1 

, а в теге soap: address мне нужно изменить местоположениебыть

    http://test.mycompany.com/MyWSService/MyWS 

вместо

    http://local-server-name/MyWSService/MyWS.

MyWS.java

@WebService(name="MyWS",
        portName="MyWSPort",
        serviceName="MyWSService",
        targetNamespace="http://test.mycompany.com/")
@Stateless()
public class MyWS {

    @WebMethod(operationName="testLogin")
    public String testLogin(@WebParam(name="username") String username,
            @WebParam(name="password") String password) {
        String retVal = "Test Failed.";

        //do some stuff

        return retVal;
    }

    ...
}

MyWSDL.wsdl

<definitions targetNamespace="http://test.mycompany.com/" name="MyWSService">

  <types>
    <xsd:schema>
      <xsd:import namespace="http://test.mycompany.com/" schemaLocation="http://local-server-name/MyWSService/MyWS?xsd=1"/>
    </xsd:schema>
  </types>

  <service name="MyWSService">
    <port name="MyWSPort" binding="tns:MyWSPortBinding">
      <soap:address location="http://local-server-name/MyWSService/MyWS"/>
    </port>
  </service>
</definitions>

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Мне удалось решить проблему, изменив конфигурацию HTTP-службы GlassFish. Я установил псевдоним сервера на test.mycompany.com:80 для прослушивателя HTTP, используемого для приложения веб-служб. Обычно на наших веб-серверах есть такая конфигурация, поэтому изначально я даже не рассматривал конфигурацию сервера приложений.

0 голосов
/ 08 июня 2011

Как вы генерируете WSDL?Вы генерируете это вручную?Вы генерируете его с помощью wsgen с опцией -wsdl?

Если вы развертываете с JAX-WS, на самом деле вам не нужно делать ни одну из этих вещей.Вместо этого вы сможете перейти к ...

<SERVER_URL>/<CONTEXT_LOCATION>/<SERVLET_URL>?wsdl

... и сервлет JAX-WS автоматически сгенерирует wsdl на правильном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...