Настраиваемая генерация WSDL в подходе «сначала код» - PullRequest
0 голосов
/ 19 октября 2011

Я создал несколько веб-сервисов, использующих подходы CXF и code-firts.Вот мои настройки и код:

web.xml:

...
<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/ws/*</url-pattern>
</servlet-mapping>

applicationContext.xml:

<jaxws:endpoint implementor="#testService" address="/test" />

TestService.java:

@Service
@WebService
public class TestService {

    @WebMethod
    public String random() {
        return "random=" + Math.random();
    }
}

Таким образом, запрос к http://localhost:8080/myWebApp/ws/test?wsdl получает красивый WSDL, который содержит:

<wsdl:service name="TestServiceService">
    <wsdl:port binding="tns:TestServiceServiceSoapBinding" name="TestServicePort">
        <soap:address location="http://localhost:8080/myWebApp/ws/test"/>
    </wsdl:port>
</wsdl:service>

Проблема в том, что я хочу другое местоположение в зависимости от объекта HttpServletRequest.Итак, мне нужно каким-то образом переписать код генерации WSDL.Я искал, где этот контент создан, но безуспешно.

Как лучше всего решить эту проблему?

1 Ответ

2 голосов
/ 20 октября 2011

В CXF 2.4.x WSDL отправляется обратно через org.apache.cxf.frontend.WSDLGetInterceptor. Вы можете найти там идеи о том, как изменить что-то или подобное.

Что именно вы пытаетесь изменить в этом? Если это просто местоположение на мыло: адрес, вы можете просто вставить перехватчик, который будет запускаться перед ним, который вызовет:

message.put(WSDLGetUtils.PUBLISHED_ENDPOINT_URL, "http://localhoost:8080/foo");

или аналогичный.

...