restservice插件(resetservice)

http://www.itjxue.com  2023-01-25 10:06  来源:未知  点击次数: 

怎么应用Protobuf 和Jersy 打造Rest Service

如何应用Protobuf 和Jersy 打造Rest Service

我使用的是Maven Project,所以

1。第一步加入Maven Dependency。

dependency

groupIdcom.sun.jersey/groupId

artifactIdjersey-server/artifactId

version1.10/version

/dependency

dependency

groupIdcom.sun.jersey/groupId

artifactIdjersey-client/artifactId

version1.10/version

/dependency

dependency

groupIdcom.google.protobuf/groupId

artifactIdprotobuf-java/artifactId

version2.4.1/version

/dependency

2。 然后,加入ant plugin来帮助我们产生protobuf 的java bean。

build

plugins

plugin

artifactIdmaven-antrun-plugin/artifactId

executions

execution

idgenerate-sources/id

phasegenerate-sources/phase

goals

goalrun/goal

/goals

configuration

tasks

mkdir dir='target/generated-sources' /

exec executable='protoc'

arg value='--java_out=target/generated-sources' /

arg value='src/main/resources/addressbook.proto' /

/exec

/tasks

sourceRoottarget/generated-sources/sourceRoot

/configuration

/execution

/executions

/plugin

/plugins

pluginManagement

plugins

!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--

plugin

groupIdorg.eclipse.m2e/groupId

artifactIdlifecycle-mapping/artifactId

version1.0.0/version

configuration

lifecycleMappingMetadata

pluginExecutions

pluginExecution

pluginExecutionFilter

groupId

org.apache.maven.plugins

/groupId

artifactId

maven-antrun-plugin

/artifactId

versionRange[1.3,)/versionRange

goals

goalrun/goal

/goals

/pluginExecutionFilter

action

ignore/ignore

/action

/pluginExecution

/pluginExecutions

/lifecycleMappingMetadata

/configuration

/plugin

/plugins

/pluginManagement

/build

3。 创建addressbook.proto文件

package tutorial;

option java_package = "com.sampullara.jaxrsprotobuf.tutorial";

option java_outer_classname = "AddressBookProtos";

message Person {

required string name = 1;

required int32 id = 2;

optional string email = 3;

enum PhoneType {

MOBILE = 0;

HOME = 1;

WORK = 2;

}

message PhoneNumber {

required string number = 1;

optional PhoneType type = 2 [default = HOME];

}

repeated PhoneNumber phone = 4;

}

message AddressBook {

repeated Person person = 1;

}

4。 运行mvn generate-sources命令来生成AddressBookProtos.java文件。

5。创建rest server端代码AddressBookService.java

package com.sampullara;

import javax.ws.rs.Consumes;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.Path;

import javax.ws.rs.Produces;

import com.sampullara.jaxrsprotobuf.tutorial.AddressBookProtos;

@Path("/person")

public class AddressBookService {

@GET

@Produces("application/x-protobuf")

public AddressBookProtos.Person getPerson() {

return AddressBookProtos.Person.newBuilder()

.setId(1)

.setName("Sam")

.setEmail("sam@sampullara.com")

.addPhone(AddressBookProtos.Person.PhoneNumber.newBuilder()

.setNumber("415-555-1212")

.setType(AddressBookProtos.Person.PhoneType.MOBILE)

.build())

.build();

}

@POST

@Consumes("application/x-protobuf")

@Produces("application/x-protobuf")

public AddressBookProtos.Person reflect(AddressBookProtos.Person person) {

return person;

}

}

6。创建ProtobufProviders.java文件处理protobuf对象序列化。

package com.sampullara;

import com.google.protobuf.GeneratedMessage;

import com.google.protobuf.Message;

import javax.ws.rs.Consumes;

import javax.ws.rs.Produces;

import javax.ws.rs.WebApplicationException;

import javax.ws.rs.core.MediaType;

import javax.ws.rs.core.MultivaluedMap;

import javax.ws.rs.ext.MessageBodyReader;

import javax.ws.rs.ext.MessageBodyWriter;

import javax.ws.rs.ext.Provider;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

import java.lang.reflect.Type;

import java.util.Map;

import java.util.WeakHashMap;

火狐浏览器里的restClient插件怎么用

1.打开RESTClient:

2.先设置http的header-customHeader,name: Content-Type ,value: application/x-www-form-urlencoded

3.输入相应的信息:

4.返回查看信息就可以了

如何在eclipse上配置rest服务啊

在Eclipse里,新建一个web工程

第一步,添加需要用的jar包,如下图

第二步,新建一个class,代码如下

第三步,修改web.xml配置文件,如下图?

启动tomcat, 访问本机测试地址:

这时我们就可以访问到我们发布的rest服务了,如下图

如何在火狐安装webservice rest

关于这个插件的安装不用多说,下面我将简单介绍一下这个插件的使用:

为了方便测试,我写了一个登录的接口:

然后打开“HttpRequester”这个插件,发起请求:

从上图我们可以看到,我们需要在界面的左边填上一些请求的参数。从上到下分别填上接口地址,请求类型(GET,POST,PUT,DELETE等),正文类型,最后是填上请求的参数,我这里使用了json格式。

如何在Android使用Rest服务从客户端调用webservice

企业提供特定的服务service,其他用户通过internet即web访问这些服务。换句话说,WebService是两个计算机之间通讯(交谈)的技术,网络中一台计算机想要调用另一台计算机的方法时,此时可以需要WebService。很火的SOA、云计算在技术层面上都是WebService

用程序员的观点就是:企业提供实现某功能的函数,其他用过通过在线访问这些函数。

webservice两个重要文件:.aar:服务包文件,提供服务,.wsdl:web服务接口定义语言文件,供客户端使用。

webservice关键技术

1、XML:可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。

2、SOAP:SOAP是web service的标准通信协议,SOAP为simple object access protocoll的缩写,简单对象访问协议.它是一种标准化的传输消息的XML消息格式。即XML文件的消息格式,由这个协议来决定。SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,xml作为数据传送的格式。

3、Axis2:Axis2是实现Web Service的一种技术框架,是新一代的SOAP引擎,即通过这个架构很方便地实现webservice.即在服务端通过这个技术支持,很方便地发布webservice服务,使开发只关注具体的商业实现,而由这个框架直接发布,节省了开发者的时间。在客户端同样只关注调用。为了使用这个框架,在3个地方需要部署Axis2的库:web服务器tomcat上、eclipse服务端开发axis2库、eclipse客户端开发ksoap2库。

4、WSDL:WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。其主要目的在于web service的提供者将自己的web服务的所有相关内容,如所提供的服务的传输方式,服务方法接口,接口参数,服务路径等,生成相应的完全文档,发布给使用者。使用者可以通过这个WSDL文档,创建相应的SOAP请求消息,通过HTTP传递给webservice提供者;web服务在完成服务请求后,将SOAP返回消息传回请求者,服务请求者再根据WSDL文档将SOAP返回消息解析成自己能够理解的内容。

5、UDDI:UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。UDDI,英文为 "Universal Description, Discovery and Integration",可译为“通用描述、发现与集成服务”。UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站,目前全球有IBM等4家UDDI商用注册网站。因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册。

webservice服务端的实现

1、tomcat服务器部署:部署Axis2到tomcat:将Axis2.war解压到tomcat的webapps目录下即可,如果有数据库连接,需把数据库连接jar包添加到tomcat的lib目录下,如:oracle的ojdbc14.jar,和mysql的 mysql-connector-java-3.1.11-bin.jar。部署成功后,启动tomcat,可通过访问,查看是否部署成功。webservice的axis服务存档aar发布文件就发布到tomcat\webapps\axis2\WEB-INF\services这个目录下

2、安装axis2插件到eclipse:解压插件,直接拷贝到eclipse的插件目录plugins,两个插件为:org.apache.axis2.eclipse.codegen.plugin_1.6.0.jar、org.apache.axis2.eclipse.service.plugin_1.6.0.jar。打开Eclipse,选择File/New/Other菜单项,看到如下界面表明安装成功:

安装这两个插件的目的是:方便生成Axis2的服务包(.aar文件)和生成Axis2客户端

3、打包生成axis2服务包:

选择服务程序类文件所在的目录,不包括包,选中Include..,表示在生成的服务包中只包括类文件,不包括其他文件。

选择跳过WSDL文件,WSDL文件会在部署这个服务到Tomcat后,有Axis2自动生成,通过可以查看文件内容。

注意:WSDL是web服务定义语言,通过XML的方式对该服务类进行描述,客户端访问服务时要用到这个文件,可以生成这个文件给客户端,也可以上面的在线获取这个文件。

点击“next”,进入添加服务需要的库文件界面:

需要的库文件直接部署到tomcat中,此处不需要添加,进入下一界面:

选择自动生成service.xml文件。点击进入下一界面:

输入服务名和类名,点击load即可找出该服务程序的全部方法。

输入发布路径,和文件名。生成newWs.aar服务包文件。

部署完成后,输入,即可看到已部署的全部服务。

eclipse中webservice不能发布的原因:

1、界面问题,把发布界面最大化或拖拽,是界面刷新,就可以看到输入界面了。

2、发布界面最后一步,load时,没有任何反映,是这个类的代码有问题,例如有加载动态库的代码,动态库找不到,则会没有反映。

3、代码没改变的情况下好像只能生成一次,想在生成的话,需要改代码,或需要重启eclipse

webservie服务端:java调用C++动态库的实现

1、在eclipse中编写一个java类文件,应用中的其他类可以调用这个类中的函数:

[cpp] view plaincopyprint?

01.package util;

02.

03.public class InvokeDll

04.{

05. //测试函数

06. public native int testFunc(int a, int b);

07.

08. //获取最近一次错误代码

09. public native int lastErr();

10.}

package util;

public class InvokeDll

{

//测试函数

public native int testFunc(int a, int b);

//获取最近一次错误代码

public native int lastErr();

}

注意:函数要用native修饰符

2、用javah命令生成C++可调用的.h文件

a、上述java类编译生成类文件InvokeDll.class

b、set classpath="D:\teatInvokeDll\bin",类文件生成在D:\testInvokeDll\bin\util\InvokeDll.class

c、命令行进入D:\teatInvokeDll\bin

d、javah util.InvokeDll

你会发现当前目录下多了一个util_InvokeDll.h文件,文件内容如下:

[cpp] view plaincopyprint?

01./* DO NOT EDIT THIS FILE - it is machine generated */

02.#include

03./* Header for class util_InvokeDll */

04.

05.#ifndef _Included_util_InvokeDll

06.#define _Included_util_InvokeDll

07.#ifdef __cplusplus

08.extern "C" {

09.#endif

10./*

11. * Class: util_InvokeDll

12. * Method: testFunc

13. * Signature: (II)I

14. */

15.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc

16. (JNIEnv *, jobject, jint, jint);

17.

18./*

19. * Class: util_InvokeDll

20. * Method: lastErr

21. * Signature: ()I

22. */

23.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr

24. (JNIEnv *, jobject);

25.

26.#ifdef __cplusplus

27.}

28.#endif

29.#endif

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class util_InvokeDll */

#ifndef _Included_util_InvokeDll

#define _Included_util_InvokeDll

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: util_InvokeDll

* Method: testFunc

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc

(JNIEnv *, jobject, jint, jint);

/*

* Class: util_InvokeDll

* Method: lastErr

* Signature: ()I

*/

JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

3、在VC中生成dll如java2dll.dll

a、新建一个空的dll工程,名叫java2dll。

b、把util_InvokeDll.h头文件复制到工程目录下,并添加到header files文件夹里。

c、在source files文件目录中添加一个java2dll.cpp,文件内容是头文件里的方法的实现:

[cpp] view plaincopyprint?

01.#include

02.#include "util_InvokeDll.h"

03.

04.JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)

05.{

06. int i=0;

07. /*HMODULE hModule = ::LoadLibrary("test.dll");

08.

09. PFUN newfun = (PFUN)::GetProcAddress(hModule,"testFn");

10. i = newfun(a,b);

11. ::FreeLibrary(hModule);

12. */

13. i=a+b;

14. return i;

15.}

16.

17.JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)

18.{

19. int i=0;

20. return i;

21.}

#include

#include "util_InvokeDll.h"

JNIEXPORT jint JNICALL Java_util_InvokeDll_testFunc(JNIEnv *, jobject, jint a, jint b)

{

int i=0;

/*HMODULE hModule = ::LoadLibrary("test.dll");

PFUN newfun = (PFUN)::GetProcAddress(hModule,"testFn");

i = newfun(a,b);

::FreeLibrary(hModule);

*/

i=a+b;

return i;

}

JNIEXPORT jint JNICALL Java_util_InvokeDll_lastErr(JNIEnv *, jobject)

{

int i=0;

return i;

}d、点击“运行”-“编译”,这时你会看到很多数据类型没被声明的错误,那是因为util_InvokeDll.h使用了很多JAVA_HOME/include/jni.h文件自定义的数据类型,而jni.h又引

用了JAVA_HOME/include/win32/jni_md.h,这时你需要把jni.h和jni_md.h引入到工程里面来,左击工程名“工程属性”-“文件/目录”-“包含文件目录”把JAVA_HOME/include和JAVA_HOME/include/win32文件夹添加,确定后,再次编译一切正常,这时在工程的目录下就找到java2dll.dll文件,这样dll文件就生成了

4、调用其他标准的C++动态库,如test.dll

例如test.dll,是其他人编写的标准的C++动态库,可以在上述注释掉的部分调用,testFn是它里面的函数。

5、在webservice端的java调用

加载库Java2dll,并调用接口函数:

[cpp] view plaincopyprint?

01.static

02.{

03. //动态库dll文件要放到系统目录或用绝对路径凋用System.load("绝对路径")

04. System.loadLibrary("Java2dll");

05.}

06.

07./实例化调用类

08.InvokeDll dll = new InvokeDll();

09.

10.//调用函数

11.String strRet = dll.testFunc(a, b)

static

{

//动态库dll文件要放到系统目录或用绝对路径凋用System.load("绝对路径")

System.loadLibrary("Java2dll");

}

//实例化调用类

InvokeDll dll = new InvokeDll();

//调用函数

String strRet = dll.testFunc(a, b)

总结:调用过程:java普通类--java native类--jni C++ 动态库--标准C++动态库,最终实现java普通类对标准C++动态库的调用。

(责任编辑:IT教学网)

更多

推荐其它系统文章