клиент веб-службы динамического прокси мыла в Java? - PullRequest
4 голосов
/ 23 июня 2011

Можно ли использовать веб-сервисы soap-rpc таким образом, чтобы клиент генерировался через общий интерфейс? Restful веб-сервисы делают это таким образом, но как насчет мыла? Всегда ли вам нужно использовать такой инструмент, как Axis или CXF, чтобы генерировать свои заглушки и прокси-серверы, или есть что-то, что настроит его динамически?

Спасибо.

РЕДАКТИРОВАТЬ # 1:

Чтобы уточнить, я хочу сделать что-то вроде этого:

Общий интерфейс:

@WebService
public interface MyWebService {

   @WebMethod
   String helloWorld();
}

Этот общий интерфейс уже можно использовать для создания серверного компонента. Мой вопрос: можно ли использовать этот тип общего интерфейса на стороне клиента для создания динамических прокси? Restful Web-сервисы делают это таким образом (Restlets & CXF), и кажется, что в мире .Net есть такой тип функциональность тоже.

Ответы [ 6 ]

4 голосов
/ 09 августа 2011

Я бы увидел этот учебник по JAX-WS , полезный для ваших целей:

В примере кода клиент веб-служб настраивается путем добавления аннотации @WebServiceRef с указанием свойствак WSDL-расположению к классу реализации клиента, и для доступа к материалам из веб-службы, на которые есть ссылка, никаких инструментов не требуется.

Было ли это так, как вы хотели бы, или даже ответили правильновопрос

2 голосов
/ 11 августа 2011
2 голосов
/ 23 июня 2011

Не совсем уверен, что вы ищете, но если вы не хотите полагаться на сгенерированные JAX-WS / JAXB артефакты (сервисные интерфейсы и объекты привязки), вы можете использовать Service и Dispatch API.Например:

QName serviceName = new QName(...);
Service service = Service.create(serviceName);
QName portName = new QName(...);
String endpointAddress = "...";
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
SOAPMessage request = ...;
SOAPMessage response = dispatch.invoke(request);
1 голос
/ 18 августа 2011

Я не очень хорошо знал java, но был вынужден выучить некоторые из них, чтобы выполнить задачу, которую мне дали, мне нужно было использовать службу .Net, которую я уже написал, мне пришлось провести небольшое исследование.

Я обнаружил, что 99% примеров / примеров / проблем с вызовом метода для службы .Net или любой службы, связанной с этим, связаны с использованием J2EE (ServiceManager) или классов сборки и прокси, которые отражают вызываемую службу.К сожалению для меня, ничего из этого не будет работать.Я работал "в коробке".Я не мог добавлять новые классы, не мог ссылаться на WSDL, не имел J2EE, но DID имел доступ к стандартным библиотекам Java.Я привык делать подобные вещи практически на любом другом языке, кроме java, но теперь выбора не было, и java был.

Много копания и выяснения всей новой терминологии, методов, классови т. д., я знал, что подхожу близко, но у меня были проблемы с некоторыми мелкими предметами, чтобы выполнить задачу.Потом я наткнулся на этот пост: http://www.ibm.com/developerworks/xml/library/x-jaxmsoap/

Пока у вас есть какое-то представление о том, что вам нужно, чтобы отправить мыльную услугу в терминах мыльного конверта, ссылка выше даст вам информацию, которую вынужно иметь возможность вызывать сервис без классов, генераторов классов wsdl и J2EE, apache или других зависимостей.

Через час после прочтения упомянутой статьи у меня был класс, работающий и около 10 минутпозже преобразовал код в решение «в коробке».

Надеюсь, это поможет

1 голос
/ 12 августа 2011

Если вы хотите вызвать веб-сервис, вы должны знать методы, реализованные на нем. Для этого нам нужно сделать заглушки ИЛИ мы можем прочитать это из WSDL.

Я создал клиент WS, использующий библиотеки AXIS2, который не имеет заглушек. Дело в том, что для каждого различий. WS нам нужно создать дескрипторы ответа.

Вы можете вызывать любой метод WS, используя конверты SOAP, и обрабатывать ответ.

//common interface for response handlers...
//implement this for diff. web service/methods

public interface WSRespHandler{
    public Object getMeResp(Object respData);
}

//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ...
        return repHandler.getMeResp(xmlData);
    }
}

Пожалуйста, проверьте ссылку ниже, которая показывает пример интерфейса для клиента WS.

http://javalibs.blogspot.com/2010/05/axis2-web-service-client-without.html

За каждую разницу Метод WS мы можем иметь diff. реализация интерфейса WSRespHandler, которая поможет разобрать ответ.

0 голосов
/ 11 августа 2011

Apache Tuscany может помочь вам, хотя он может быть тяжелее, чем вы хотите http://tuscany.apache.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...