Весна: Как внедрить wsdlLocation в @WebServiceRef - PullRequest
1 голос
/ 08 июля 2011

Я использую Spring, и в моем клиенте, веб-приложении, мне нужно взаимодействовать с веб-сервисом Jax-WS. В настоящее время он работает через аннотацию интерфейса службы с аннотацией @WebServiceRef. Однако мне нужно, чтобы свойство wsdlLocation было введено, потому что, очевидно, Sun Microsystems или Oracle, расположение wsdl веб-службы в рабочей среде будет отличаться от того, которое используется во время разработки.

Как я могу ввести wsdlLocation?

Вот чрезвычайно упрощенная версия кода:

//This client service lives in the web app. wsimport used to generate artifacts.
@Component
public class MyClientServiceImpl implements MyClientService {

    @WebServiceRef(wsdlLocation = "http://localhost:8080/ws/MyOtherService/the.wsdl", value = MyOtherServiceService.class)
    //Interface generated by wsimport
    private MyOtherService otherService;

    @Override
    public List<SomeSearchData> search(String searchString) {
        return otherService.search(searchString);
    }
}

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Это частично описано в JAX-WS FAQ . Вам нужно вставить строку конечной точки как стандартную переменную-член, а затем использовать ...

((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, this.injectedEnpointURL); 
0 голосов
/ 26 марта 2012

Вы можете использовать LocalJaxWsPortProxyFactoryBean .Вы можете настроить WSDL URL (среди прочего) через этот фабричный компонент.Вот фрагмент конфигурации из официальной документации :

<bean id="accountWebService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
    <property name="serviceInterface" value="example.AccountService"/>
    <property name="wsdlDocumentUrl" value="http://localhost:8888/AccountServiceEndpoint?WSDL"/>
    <property name="namespaceUri" value="http://example/"/>
    <property name="serviceName" value="AccountService"/>
    <property name="portName" value="AccountServiceEndpointPort"/>
</bean>

Затем вы можете разрешить Spring автоматически передавать эту зависимость в ваш целевой компонент (например, MyClientServiceImpl).

...