Почему при создании клиента Apache CXF все еще нужен WSDL при создании экземпляра клиента? - PullRequest
4 голосов
/ 20 января 2012

Я хочу использовать службу SOAP, но WSDL предоставляется мне в автономном режиме, в результате чего клиент генерируется с локальным путем к WSDL.

public class SoSo extends Service {
    public final static URL WSDL_LOCATION;
    public final static QName SERVICE = new QName("http://tempuri.org/", "SoSo");
    public final static QName SoSoSoap12 = new QName("http://tempuri.org/", "SoSoSoap12");
    public final static QName SoSoSoap = new QName("http://tempuri.org/", "SoSoSoap");
    static {
        URL url = null;
        try {
            url = new URL("file:/c:/Dev/Java/workspace/service-individualreport/src/main/resources/wsdl/SoSo.wsdl");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(SoSo.class.getName())
                .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "file:/c:/Dev/Java/workspace/service-individualreport/src/main/resources/wsdl/SoSo.wsdl");
    }
    WSDL_LOCATION = url;
}

С моей точки зрения, я хотел бы создать WSDL только один раз, а затем указать местоположение службы.

1 Ответ

8 голосов
/ 23 января 2012

Пара частей на этот вопрос:

1) Согласно спецификации JAX-WS, сгенерированный код не имеет ALL информации, необходимой для запроса. Таким образом, wsdl технически необходим. С помощью CXF вы МОЖЕТЕ передать «null» для URL-адреса wsdl, а затем использовать порт ((BindingProvider)) .getRequestContext (). Put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, «http://localhost/....")» для установки адреса и для многих случаев использования это будет работа.

2) У инструмента wsdl2java есть флаг -wsdlLocation, который можно использовать для создания сервисных объектов с определенным расположением. -wsdlLocation "" не должно приводить к сожжению кода. Тогда код не был бы действительно переносимым. (JAXWS ri / metro требует wsdl)

...