Создание клиента веб-сервиса с известным, но недоступным wsdl

Нам предоставила wsdl и xsd схему компания, с которой мы работаем по электронной почте. К веб-сервисам, с которыми мы взаимодействуем через интерфейс, получают доступ через туннель IPsec. Существуют локальные ссылки (на их конце) в опубликованном WSDL, что означает, что мы не можем использовать его.

1-й вопрос: действительно ли это - общая установка? Я думал, что точка наличия WSDL не была только, чтобы определить контракт, но и также выставить услугу для потребителей.

Я могу легко сгенерировать клиент-серверный код прочь обеспеченного WSDL с помощью wsimport, wsconsume, и т.д. Я знаю, когда мой сгенерированный клиент звонит моему сгенерированному сервису, он создает корректное сообщение, в котором я нуждаюсь.

2-й Вопрос: существует ли простой способ направить это к другому адресу мыла?

Я просто хочу смочь сделать что-то как:

SalesTaxService svc = new SalesTaxService();
SalesTax tax = svc.getSalesTaxPort()
tax.getRate("NY");

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

Я пропускаю что-то?

*В ответ на skaffman: Это - то, что было сгенерировано. Это приняло значение по умолчанию к wsdlLocation как пожатие плеч имени

   @WebServiceClient(name = "SomeService")
   public class SomeService_Service extends Service {

    public SomeService_Service(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);            
    }

    public SomeService_Service(URL wsdlLocation) {
        super(wsdlLocation, new QName("urn:some_service", "SomeService"));   
    }
  }
7
задан skaffman 19 January 2010 в 23:59
поделиться

2 ответа

Итак, я выяснил, почему у меня возникла проблема. Я предполагал, что WSDLOCENCE должен был быть WSDL, что фактическое обслуживание было публикации. Это конечно не так. Решение состоит в том, чтобы упаковать локальный WSDL с правильным мылом: адрес для фактического обслуживания в клиенте.

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

HelloService service = new HelloService (
  this.getClass().getResource("originalHello.wsdl"),
  new QName("http://example.org/hello", "HelloService "));
HelloPort proxy = service.getHelloPort();

Map<String, Object> ctxt = ((BindingProvider)proxy ).getRequestContext();
ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192);
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpointaddress");

proxy.sayHello("Hello World!");

кредита идет: Jianming Li

3
ответ дан 7 December 2019 в 05:23
поделиться

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

Нет, WSDL является чисто описательным инструментом, он не имеет реальной роли времени выполнения. Веб-сервис работает полностью независимо от WSDL. Это не редкость для того, чтобы WSDL не быть разоблаченным.

Есть ли простой способ сделать это Различный ямовый адрес?

, который полностью зависит от того, какую реализацию веб-службы вы используете, и вы не говорите, хотя я предполагаю JAX-WS. Если это так, артефакты, которые генерируют инструменты JAX-WS, позволяют проходить в URL-адреса к конструкторам клиента, я думаю.

5
ответ дан 7 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: