#java #web-services #hyperlink
#java #веб-службы #гиперссылка
Вопрос:
Может ли кто-нибудь заполнить недостающую ссылку в приведенном ниже коде?
Первый способ:
Файл интерфейса веб-службы — HappyService.
JaxWSProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getInterceptors().add(new LoggingInInterceptor());
factory.getInterceptors().add(new LoggingOutInterceptor());
//MISSING LINK. Where does HappyService.class come from? I don't have it
factory.setServiceClass(HappyService.class);
factory.setAddress("http://......../happyService");
//Again how do I get HappyService?
HappyService client = (HappyService) factory.create();
Второй способ:
String UrlString = "Your WSDL URL";
String nameSpaceUri = "urn:Foo";
String serviceName = "MyHelloService";
String portName = "HelloIFPort";
URL helloWsdlUrl = new URL(UrlString);
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Service helloService =
serviceFactory.createService(helloWsdlUrl,
new QName(nameSpaceUri, serviceName));
//Where did dynamicproxy.HelloIF come from? This code won't compile as that file does not exist anywhere
dynamicproxy.HelloIF myProxy =
(dynamicproxy.HelloIF)
helloService.getPort(
new QName(nameSpaceUri, portName),
dynamicproxy.HelloIF.class);
System.out.println(myProxy.sayHello("Buzz"));
Любой, кто имеет представление о том, откуда берутся эти интерфейсные классы и как они генерируются, пожалуйста, дайте мне знать. Похоже, что единственный способ, которым я могу выполнить вызов веб-службы, — это написать SOAP-запрос вручную, и я действительно не хочу этого делать, поскольку он может стать очень большим и подверженным ошибкам.
Комментарии:
1. Используете ли вы фреймворк веб-службы? Основываясь на первом примере, я думаю, что вы используете CXF. Класс HappyService должен быть классом, сгенерированным задачей wsdl2java, предоставляемой CXF. У вас нет сгенерированного пакета classes?
2. Я заметил, что ваш другой вопрос выглядит как более ранняя версия этого. Я бы посоветовал вам отредактировать существующий вопрос, чтобы добавить больше деталей, вместо того чтобы открывать новый в будущем. Добро пожаловать в StackOverflow!
3. Нет, нет доступа к сгенерированным классам. Что я хочу сделать, так это вызвать чью-то общедоступную веб-службу по всему миру.
4. Есть ли у вас доступ к WSDL целевого веб-сервиса? Смотрите мой ответ ниже, это может вам помочь.
Ответ №1:
Существует множество инструментов, которые генерируют классы Java веб-служб из файлов определения WSDL.
Вы могли бы попробовать JAXB, который является стандартным инструментом Java для этой задачи. Другой возможностью является Axis, которая на уровень выше.
Ответ №2:
Вам нужна библиотека SOAP, такая как Apache Axis2. Библиотека будет включать инструменты для генерации классов Java из WSDLS. Вы бы использовали этот сгенерированный код для выполнения вызовов веб-службы.
Комментарии:
1. То есть в принципе нет способа генерировать эти классы «на лету»? Я имею в виду, что я хочу развернуть приложение, которое может запускать веб-службы, зная немного больше, чем URL-адрес WSDL. Похоже, что это было бы очень распространенным делом.
2. Предположительно, вы могли бы сгенерировать новый клиент во время выполнения с помощью Axis2 и загрузить эти новые классы в текущую JVM для вызова веб-службы. Я никогда раньше не пытался это сделать и даже не видел необходимости в этом. Вы также могли бы попытаться написать «универсальный» клиент, который проверяет WSDL и создает одноразовый вызов этой службы. По сути, вы бы делали то, что делает генератор библиотеки SOAP, без записи какого-либо клиентского кода на диск.
Ответ №3:
Основываясь на вашем первом примере, я думаю, что вы используете фреймворк CXF.
Эта платформа предоставляет задачу с именем wsdl2java, которая позволяет генерировать классы из файла WSDL.
Как только ваши классы будут сгенерированы, вы сможете использовать их в своем коде для простого вызова веб-службы без необходимости создавать SOAP-сообщение вручную. Это задача CXF — сделать это.
Ответ №4:
Я думаю, это поможет, если вы обратитесь к нескольким основам веб-служб на Java
http://www.oracle.com/technetwork/java/index-jsp-137004.html