Измените schemaLocation и soap: расположение адреса во время выполнения сгенерированного WSDL с JAX-WS - PullRequest
7 голосов
/ 04 ноября 2011

Можно ли настроить расположение (schemaLocation и soap:address location) в WSDL JAX-WS?
При развертывании примера ниже, «servername» будет localhost, а «serverport» будетбыть номером локального порта для веб-приложения.

Однако я хочу перенастроить их на имя сервера прокси и имя сервера, которые перенаправляют на службу.Возможно ли это и как мне этого добиться?

Средой развертывания является Tomcat и Apache.

У меня есть следующий класс обслуживания:

@WebService
public class AuthenticationService {
....
public AuthenticationService(){}

@WebMethod
    public AuthenticationResult checkAuthentication(
        @WebParam(name = "authentication") Authentication authentication,
        @WebParam(name = "privilege") Privilege privilege) {
    ....
}
}

При запускеWSDL выглядит так:

<definitions targetNamespace="http://authentication.service.ws.ijs/" name="AuthenticationServiceService">
<types>

    <xsd:schema>
        <xsd:import namespace="http://authentication.service.ws.ijs/" schemaLocation="http://servername:serverport/WebAppName/AuthenticationService?xsd=1"/>
    </xsd:schema>
</types>

<message name="checkAuthentication">
    <part name="parameters" element="tns:checkAuthentication"/>
</message>

<message name="checkAuthenticationResponse">
    <part name="parameters" element="tns:checkAuthenticationResponse"/>
</message>

<portType name="AuthenticationService">

    <operation name="checkAuthentication">
        <input wsam:Action="http://authentication.service.ws.ijs/AuthenticationService/checkAuthenticationRequest" message="tns:checkAuthentication"/>
        <output wsam:Action="http://authentication.service.ws.ijs/AuthenticationService/checkAuthenticationResponse" message="tns:checkAuthenticationResponse"/>
    </operation>

</portType>

<binding name="AuthenticationServicePortBinding" type="tns:AuthenticationService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>

    <operation name="checkAuthentication">
        <soap:operation soapAction=""/>

        <input>
            <soap:body use="literal"/>
        </input>

        <output>
            <soap:body use="literal"/>
        </output>
    </operation>

</binding>

<service name="AuthenticationServiceService">

    <port name="AuthenticationServicePort" binding="tns:AuthenticationServicePortBinding">
        <soap:address location="http://servername:serverport/WebAppName/AuthenticationService"/>
    </port>
</service>
</definitions>

Любая помощь будет принята с благодарностью.

1 Ответ

7 голосов
/ 07 декабря 2012

Если вы сохраняете оригинальное имя хоста в своем запросе (например, используйте ProxyPreserveHost On, если используете mod_proxy), это должно исправить ваши URL, если вы используете тот же протокол.У вас все еще могут быть проблемы, если ваш прокси-сервер переключается между https и http .

...