CXF
CXF реализуется на основе XFIRE.
1) Во -первых, это все еще проблема пакетов. Вы можете скачать последнюю версию CXF по адресу http://cxf.apache.org/download.html. Конечно, я использую последнюю версию. Далее идет чепуха, создайте веб -проект и поместите его в пакет JAR. Мы не выбираем баночные пакеты, вкладываем их все.
Мы увидим, что он содержит пакет банки весны. Когда нам нужно развернуть CXF в качестве веб -проекта, нам нужно использовать файл конфигурации Spring, который будет обсуждаться позже.
Или класс интерфейса и класс реализации:
@Webservice public interface ireaderservice {public Reader getReader (@WebParam (name = "name") String name,@webparam (name = "password") String Password); Общественный список <Reader> getReaders (); } @WebService(endpointInterface="com.cxf.servlet.IReaderService",serviceName="readerService") public class ReaderService implements IReaderService{ public Reader getReader(@WebParam(name="name") String name,@WebParam(name="password") String password) { return new Reader(name,password); } public List <Reader> getReaders () {list <Reader> ReaderList = new ArrayList <Reader> (); readerlist.add (новый читатель ("Shun1", "123")); readerlist.add (новый читатель ("Shun2", "123")); вернуть readerlist; }} За исключением добавления аннотаций, эти два класса такие же, как и упомянутые вчера. Я не буду говорить об этом здесь. Для объяснений аннотаций вы можете взглянуть на документацию Javaee. Но это должно быть легко понять в соответствии со значением.
Далее Javabean или класс читателей:
Открытый класс читатель {частный статический окончательный длинный serialversionuid = 1L; Приватное название строки; Private String Password; public Reader () {} public Reader (String name, String password) {this.name = name; this.password = пароль; } // get/set Метод опускает публичную строку toString () {return "name:"+name+", password:"+password; }} Вышесказанное было написано.
2) Хотим ли мы использовать его в качестве веб -проекта? Не волнуйся, не используй это сейчас. CXF поставляется с легким контейнером, которая эквивалентна самой пружине, обеспечивающей контейнеры IOC. Мы можем использовать его, чтобы проверить, было ли наше развертывание успешным.
Давайте просто возьмем тестовый класс:
public static void main (string [] args) {System.out.println ("Сервер начинается ..."); Readerservice readerservice = new ReaderService (); Endpoint.publish ("http: // localhost: 8080/readerservice", readerservice); System.out.println («Сервер запускается ...»); } Очень просто. Это нормально, чтобы напрямую публиковать адрес, а затем указать интерфейс или класс. Я использую здесь классы, но стараюсь использовать интерфейсы. В конце концов, программирование, ориентированное на интерфейс, является реальной объектно-ориентированной идеей.
Давайте начнем видеть результаты:
Мы видим, что стартап был завершен, а затем запустите браузер, чтобы увидеть, успешно ли он.
Прямо введите http: // localhost: 8080/readerservice? WSDL в браузере, мы можем увидеть:
Он генерирует необходимый нам файл WSDL, указывая, что мы успешно его развернули.
3) После того, как развертывание будет успешным, мы будем его называть. Его звонок также довольно прост. Это похоже на XFIRE. Вы можете получить интерфейс, а затем вызвать метод как локальный класс.
public static void main (string [] args) {jaxwsproxyfactorybean factorybean = new jaxwsproxyfactorybean (); Factorybean.setserviceClass (ureaderservice.class); factorybean.setAddress ("http: // localhost: 8080/readerservice"); Readerservice readerservice = (ireaderservice) factorybean.create (); Reader Reader = readerservice.getReader ("Shun", "123"); System.out.println ("Reader:"+Reader); } Здесь очень просто. Вы можете получить заводский класс, затем напрямую установить интерфейс и адрес и создать для получения соответствующего интерфейса. Как и XFIRE, вам также необходимо сначала определить прототип интерфейса, в противном случае эти вызовы не могут начать.
Мы бегаем, чтобы получить результат:
Нет проблем, это согласуется с ожидаемыми результатами.
4) Но во многих случаях мы не хотим, чтобы наше веб -сервис и наше приложение разделяли два сервера, но хотим, чтобы они находились в одном и том же контейнере, Tomcat или Jboss или других, поэтому мы должны развернуть веб -сервис, который мы завершили ранее через Интернет.
Обратите внимание, что нам нужно использовать файлы определения пружины здесь.
Сначала посмотрите на web.xml:
<? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "webapp_id" version = "3.0"> <cestemple-param> <mecplaity> context-name> context-name> </nectept name. <param-value> web-inf/beans.xml </param-value> </context-param> <delloader> <lloader-class> org.springframework.web.context.contextlisterlistener </sluster-class> </sluster> <servlet> <servlet-name> cxfservlet </servlet-name> <Servlet-class> org.apache.cxf.transport.servlet.cxfservlet </servlet> </servlet> <servlet-mapping> <servlet-name> cxfservlet </servlet-name> <url-pattern>/webservice/*</url-pattern> </servlet-mapping> </web-app
Здесь очень просто, просто укажите пружинный слушатель и соответствующий путь файла конфигурации и укажите метод перехвата CXF.
Далее посмотрите на Beans.xml:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: jaxws = "http://cxf.apache.org/jaxws" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.s.xs.xs.spring-beans.s.xs.spring-bean. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd "> <import resource =" classpath: meta-inf/cxf/cxf.xml "/> <import resource =" classpath: meta-inf/cxf/cxf-esteled "/> <import resource =" classpath: meta-inf/cxf/cxf-esteled "/> <import rource =" <import resource = "classpath: meta-inf/cxf/cxf-extension-soap.xml"/> <import resource = "classpath: meta-inf/cxf/cxf-servlet.xml"/> <jaxws: endpoint id = "readerservicce2" refulor = "com.cxf.serveersersersersersersersersersersersersersersersersersersersersersersers2 </beans>
Здесь очень просто, просто определите веб -сервис через Jaxws: Endpoint. Реализатор - это класс обработки веб -сервиса, а адрес - его путь доступа, аналогичный ReaderService, который мы написали ранее.
В настоящее время мы можем развернуть его в Tomcat и можно получить непосредственно через http: // localhost: 8080/cxfwebservice/webservice/readerservice2? WSDL.
Некоторые друзья спросят, почему URL, который вы посетили на этот раз, отличается от предыдущего. Фактически, предыдущий адрес доступа определяется нами, и адрес веб -сервиса здесь настроен в файле конфигурации и развернут через веб -проект. Здесь необходимо имя проекта, и мы настроили URL-Pattern как веб-сервис в CXFServlet, поэтому конечный URL такой же, как и выше.
Мы можем увидеть эффект:
Это доказывает, что наше развертывание было успешным.
Вы можете использовать предыдущий тестовый класс для тестирования снова. Обратите внимание, что вам нужно изменить адрес на URL, который мы публикуем.
CXF немного более краткий, чем XFIRE. Хотя это добавляет некоторые аннотации, они безобидны. Он просто концентрирует информацию в предыдущих Services.xml в классе, что удобнее поддерживать. Тем не менее, это все еще вопрос мнения. Некоторым людям нравятся файлы конфигурации, а другие - нет. Кроме того, метод вызова CXF более краткий, и он имеет меньший объем кода, чем XFIRE, что является значительным улучшением.
У некоторых друзей есть некоторые проблемы в процессе строительства, поэтому они освобождены от ответа один за другим. Код выпускается здесь. Друзья нуждаются его.
Все пакеты в каталоге LIB не вставлены, просто поместите все пакеты в CXF.
Примечание. Используемая IDE является идеей, а структура файла не является общей для затмения. Если вам нужно использовать его в рамках Eclipse, вы можете напрямую скопировать код и файлы в недавно созданный проект в Eclipse.
Джерси
Давайте посмотрим на его основное использование.
Давайте посмотрим на проект. Перед началом проекта вам следует загрузить пакет самостоятельно: https://maven.java.net/content/repositories/releases/com/sun/jersey/to запустить пример, вам нужно загрузить сервер и клиента. Конечно, я не хочу найти так много, поэтому я могу напрямую скачать этот пакет ZIP. https://maven.java.net/service/local/artifact/maven/redirect?r=Releases&g=com.sun.jersey&a=jersey-archive&v=1.10&e=zip
1) Просто сделайте Javabean
@Xmlrootelement public class Reader реализует Serializable {Private Static Long Long Serialversionuid = 1L; Приватное название строки; Private String Password; public Reader () {} public Reader (String name, String password) {this.name = name; this.password = пароль; } // Опустить метод get/set public String toString () {return "name:"+name+", password:"+password; }} Здесь используется тег, который представляет тип, когда он возвращается, то есть этот класс считывателей может использоваться для возврата XML.
2) Если вы хотите использовать сервисный класс, вам больше не нужно взаимодействовать, как CXF и XFIRE в прошлом. Просто используйте класс напрямую.
@Path ("/readerservice/{name}/{password}") public class readerservice {@get @produces (mediatype.application_json) public Reader getReader (@pathparam ("name") Строковое имя, @pathparam ("пароль") String Password) {вернуть новый читатель (имя, пароль); } public static void main (string [] args) бросает allodalargumentException, ioException, urisyntaxexception {httpserver server = httpserverfactory.create ("http: // localhost: 8080/"); Server.Start (); }} В это время было использовано несколько тегов. Пут считает, что друзья, которые использовали SpringMVC, должны знать этот способ письма, что соответствует URL -адресу. Если вам неясно, вы можете пойти и посмотреть в первую очередь. Тэг GET указывает, что этот метод можно получить только с помощью метода GET, в то время как произведения указывает сгенерированный результат, что означает, что система будет заключать объект считывателя в результат JSON и вернуть его.
Неважно, если вы не понимаете, вы можете понять это через некоторое время.
И в настоящее время есть основной метод, я считаю, что есть большие вопросы. Это легкий внутренний контейнер, предоставляемый Джерси. Это может быть временно использовано для нас для отладки, но определенно невозможно использовать это в реальном использовании.
3) Давайте напишем тестовый класс
public Class readerclient {public static void main (string [] args) {client client = client.create (); Webresource resource = client.resource ("http: // localhost: 8080/readerservice/shun/123213"); Reader Reader = resource.get (reader.class); System.out.println (читатель); }} Очень простой код, вы должны это понять. Клиентский объект, запрашивает веб -сервис, возвращает ресурс, а затем ресурс напрямую вызывает соответствующий метод. Конечно, этот метод соответствует нашему URL.
Здесь мы сначала проверим его с помощью легкого обслуживания, который поставляется с ним. Запустите ReaderService напрямую, который содержит основной метод. После запуска мы запускаем ReaderClient, и мы видим, что результат:
Результат правильный.
Конечно, мы не хотим использовать легкий сервис, который поставляется с ним в качестве нашего сервера. Нам нужно поместить его на тот же сервер, что и наш проект, такой как Tomcat, JBoss и т. Д.
4) Конечно, web.xml необходим для веб -проектов.
<? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "webapp_id" версия = "3.0"> <servlet> </servlet-name> jersey-name> jersey-name> jersey-name> jersey-name> jersey-name> jersey-name> jersey-name> jersey-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <Welcome-file-list> <selcoveryfile> index.jsp </wervedied-file> </werveding-file-list> </web-app>
В настоящее время весь указанный путь отдыха будет перехвачен Джерси.
Мы развертываем в Tomcat и начинаем его, а затем перезапустите ReadClient. Обратите внимание, что нам нужно сначала изменить путь ресурса:
Webresource resource = client.resource ("http: // localhost: 8080/jerseywebservice/rest/readerservice/shun/123213"); Мой проект зовут JerseyWebservice, пожалуйста, измените его в соответствии с названием вашего проекта.
После модификации мы перезапустили его, и результаты следующие:
В соответствии с вышеуказанными результатами, это означает, что эффект развертывания одинаково и также является правильным.