c webservice接口开发(webservice开发实例)

admin 301 0

老铁们,大家好,相信还有很多朋友对于c webservice接口开发和webservice开发实例的相关问题不太懂,没关系,今天就由我来为大家分享分享c webservice接口开发以及webservice开发实例的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

一、C++实现webservice

1、1 C++当然可以实现webservice,这是毋庸置疑的.axis2你知道吗?本质是运行在tomcat下的一个servlet,分java版本,和C语言版本.官方网站为:http://axis.apache.org/,首页上写着:

2、The well known Apache Axis, and the the second generation of it, the Apache Axis2, are two Web Service containers that helps users to create, deploy, and run Web Services.

3、Axis2 is avaialble in both Java as well as C, languages and details about each version can be found below.大概意思就是这东西分java版本和C版本,可以方便用户创建,部署,运行web service.而C++完全是兼容C的.

4、2当然需要服务器,可能要实现某个服务吧,至于怎样为其他平台服务,主要是监听端口实现解析http协议.

5、3你的问题有问题,js不需要拼串成XML,服务器才要拼串,JS是运行在客户端的,客户端也不是通过SOAP与服务端进行通讯的,而是根据需要调用的服务的WSDL,提供对应参数,客户端与服务端的通讯是用http协议的,而通讯方式根据是GET还是POST把相关参数放到HTTP头或者体中.而web service之间的通讯才可能用得到SOAP.

6、4 PHP调用web service是非常简单的,貌似有个函数通过SOAP调用.C++编写的web service肯定有WSDL,可以根据WSDL描述的端口参数,来调用.

7、PS1:我没有做过C++的Web service,只做过java的,但是所有语言都是相同的,基本原理都是一样的,另外web service最好的做法是对外隐藏的,不能直接调用,应该有个类似调度中心的存在来负责调用,这是一个设计方式.当然直接调用也是可以的,但这种方式效率不高.

8、PS2:C++可以做web service,但不是很好,缺乏技术支持,软件支持,虽然管道过滤器模型不限制过滤器的实现方式,但怎么说呢,C++就是不适合,毕竟和其他构件存在配合问题,而且开发成本也会相对要高点.现在主流的是C#和JAVA.

二、JAVA调用C语言发布的webservice接口

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。

importjava.rmi.RemoteException;

importorg.apache.axis.client.Call;

importorg.apache.axis.client.Service;

importorg.apache.axis.message.PrefixedQName;

importorg.apache.axis.message.SOAPHeaderElement;

importcom.cezanne.golden.user.Exception;

importcom.cezanne.golden.user.UserManagerServiceProxy;

importjavax.xml.namespace.QName;

importjava.net.MalformedURLException;

importjavax.xml.rpc.ServiceException;

importjavax.xml.soap.SOAPException;

publicstaticStringgetResult()throwsServiceException,MalformedURLException,RemoteException,SOAPException

Stringendpoint="WebService服务地址";

//通过Service实例创建Call的实例

Callcall=(Call)service.createCall();

//将WebService的服务路径加入到call实例之中.

call.setTargetEndpointAddress(newjava.net.URL(endpoint));//为Call设置服务的位置

//由于需要认证,故需要设置调用的SOAP头信息。

NameheaderName=newPrefixedQName(newQName("发布的wsdl里的targetNamespace里的url","string_itemName"));

org.apache.axis.message.SOAPHeaderElementheader=newSOAPHeaderElement(headerName);

header.addTextNode("blablabla");

//SOAPHeaderElementsoapHeaderElement=newSOAPHeaderElement("发布的wsdl里的targetNamespace里的url","SoapHeader");

//soapHeaderElement.setNamespaceURI("发布的wsdl里的targetNamespace里的url");

//soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");

//call.addHeader(soapHeaderElement);

org.apache.axis.description.OperationDescoper;

org.apache.axis.description.ParameterDescparam;

oper=neworg.apache.axis.description.OperationDesc();

param=neworg.apache.axis.description.ParameterDesc(newjavax.xml.namespace.QName("","arg0"),org.apache.axis.description.ParameterDesc.IN,newjavax.xml.namespace.QName(","string"),java.lang.String.class,false,false);

param=neworg.apache.axis.description.ParameterDesc(newjavax.xml.namespace.QName("","arg1"),org.apache.axis.description.ParameterDesc.IN,newjavax.xml.namespace.QName(","string"),java.lang.String.class,false,false);

param=neworg.apache.axis.description.ParameterDesc(newjavax.xml.namespace.QName("","arg2"),org.apache.axis.description.ParameterDesc.IN,newjavax.xml.namespace.QName(","string"),java.lang.String.class,false,false);

oper.setReturnType(newjavax.xml.namespace.QName(","string"));

oper.setReturnClass(java.lang.String.class);

oper.setReturnQName(newjavax.xml.namespace.QName("","return"));

oper.setStyle(org.apache.axis.constants.Style.WRAPPED);

oper.setUse(org.apache.axis.constants.Use.LITERAL);

oper.addFault(neworg.apache.axis.description.FaultDesc(

newjavax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url","Exception"),

newjavax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url","Exception"),

call.setOperationName(newjavax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url","opName"));

Stringres=(String)call.invoke(newObject[]("arg0","arg1"));

System.out.println("===============");

publicstaticvoidmain(String[]args){

System.out.println(getResult());

}catch(MalformedURLExceptione){

2、利用Eclipse自动生成WebService client代码就容易多了:

首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish

这样,WebService Client代码已经生成好了。

接下来写一个Test类,在main函数中输入如下代码:

Stringendpoint="服务器的WebService的地址";

YourWebServiceNameProxyumsp=newYourWebServiceNameProxy(endpoint);

StringresultStr=umsp.opMethod("arg0","arg1");

System.out.println(resultStr);

System.out.println("RemoteException异常");

三、java Webservice都有哪几种方式啊,哪种方式比较好啊

webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录。

Axis是apache下一个开源的webservice开发组件,出现的算是比较早了,也比较成熟。这里主要介绍Axis+eclipse开发webservice,当然不用eclipse也可以开发和发布webservice,只是用eclipse会比较方便。

1)在任意目录下新建一个Axis2文件夹,在该文件夹下新建eclipse目录,在eclipse目录中新建plugins目录和features目录,例如:D:\programSoftware\eclipse-SVN\Axis2\eclipse;

2)把下载的axis2插件解压,并把解压的文件放到新建的eclipse的plugins目录下;

3)在%eclipse_home%的目录下新建links目录,并在links目录下新建axis2.link文件,内容为:path=D:\programSoftware\eclipse-SVN\Axis2;

4)重启eclipse,点击·file-new-other,如果看到Axis2 Wizards,则表明插件安装成功。

(6)使用eclipse新建web工程,创建一个普通java类,至少包含一个方法。

1)点击eclipse的File-New-other,打开Axis2 Wizards,选择Axis2 Service Archiver,然后Next;

2)选择Class File Location,也就是类文件存放路径,注意:只选到classes目录,不要包括包文件夹,然后Next;

4)一路Next到Select the Service XML file to be included in the Service archive,勾选Generate theservice xml automatically;

5)Service Name-填写你的service名称,Class Name-填写类名称,要包括包名,然后点击load,然后点击Finish,这时webservice就发布成功了;

6)然后到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services看看是否多了一个.aar的文件;

注意:以上的方式是发布到axis2.war包中,你也可以把生成.aar文件copy到你的实际应用中,同时,你也可以使用eclipse的create webservice功能发布你的webservice,选择axis2生成你的webservice,这样webservice就会部署到你的应用中了。

CXF开发webservice也是比较方便和简单的,它和spring的集成可以说是非常地好。举一个CXF开发webservice的例子吧。

1)在eclipse中新建一个web工程,导入依赖包,如图:

注意:CXF开发的webservice,接口中的方法的参数一定要以这种方式,否则客户端调用的时候CXF服务端会接收不到参数的值,name:参数名称,可不写(建议写上),targetNamespace:命名空间,一定要填写上,默认是包名反过来的顺序,mode:参数类型,IN表示输入。

3)编写一个实现类,实现接口的方法;

4)和spring的集成,编写一个bean文件,如:cxf-beans.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<import resource="classpath:META-INF/cxf/cxf.xml"/>

<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>

<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

<jaxws:endpoint id="vote" implementor="com.zcl.cxf.service.VoteImpl" address="/Vote"/>

这个文件比较容易理解,就不解释了。

在web.xml文件中配置CXFServlet,加载cxf-beans.xml文件,内容如下:

id="WebApp_ID" version="2.5">

<param-name>contextConfigLocation</param-name>

<param-value>WEB-INF/cxf-beans.xml</param-value>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

<servlet-name>cxf</servlet-name>

<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

<load-on-startup>1</load-on-startup>

<servlet-name>cxf</servlet-name>

<url-pattern>/services/*</url-pattern>

把工程部署到中间件,如tomcat,就可以访问该webservice了。

return"Just do it,"+ value+"!";

public static void main(String[] args){

2)运行该java类,在浏览器上就可以访问该webservice了。

注意:开发web工程的时候,这种方法不太友好。我们可以编写一个servlet类,在servlet类的初始化方法中发布webservice,这样我们的中间件服务器启动的时候就会帮我们自动webservice了。

开发WebService的框架不少,每个框架都有各自的有点,最近我用xfire练习开发WebService,下面是开发WebService的小例子,希望对入门的人有些小帮助

1.新建一个java web project命名为TestWebService,将xfire相关的jar包添加到lib目录中,写接口类和实现类

public interface MessageService{

public String getName(String name);

public interface MessageService{

public String getName(String name);

package com.lamp.service.impl;

import com.lamp.service.MessageService;

public class MessageServiceImpl implements MessageService{

public String getName(String name){

return"hellow"+ name+", welcome to WebService world";

package com.lamp.service.impl;

import com.lamp.service.MessageService;

public class MessageServiceImpl implements MessageService{

public String getName(String name){

return"hellow"+ name+", welcome to WebService world";

在src目录下新建文件夹META-INF,然后再在其下新建文件夹xfire,在xfire目录下新建配置文件services.xml

<?xml version="1.0" encoding="UTF-8"?>

<name>MessageService</name>

<serviceClass>com.lamp.service.MessageService</serviceClass>

<implementationClass>com.lamp.service.impl.MessageServiceImpl</implementationClass>

<?xml version="1.0" encoding="UTF-8"?>

<name>MessageService</name>

<serviceClass>com.lamp.service.MessageService</serviceClass>

<implementationClass>com.lamp.service.impl.MessageServiceImpl</implementationClass>

最后在web.xml中配置xfire的servlet

<servlet-name>XFireServlet</servlet-name>

<servlet-name>XFireServlet</servlet-name>

<url-pattern>/servlet/XFireServlet/*</url-pattern>

<servlet-name>XFireServlet</servlet-name>

<url-pattern>/services/*</url-pattern>

<servlet-name>XFireServlet</servlet-name>

<servlet-name>XFireServlet</servlet-name>

<url-pattern>/servlet/XFireServlet/*</url-pattern>

<servlet-name>XFireServlet</servlet-name>

<url-pattern>/services/*</url-pattern>

这样服务器端开发完毕,现在开始客户端的开发

新建一个java project也将xfire相关的jar引入,我用ant在客户端生成代理对象,在项目路径下新建build.xml,代码为

<?xml version="1.0" encoding="UTF-8"?>

<project name="WebService" basedir="." default="gen-webservice">

<property file="build.properties">

<path id="project-classpath">

<fileset dir="${lib.dir}">

<include name="**/*.jar"/>

<target name="gen-webservice">

<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath"/>

<wsgen outputDirectory="${src.dir}"

wsdl="${wsdl.dir}" package="com.lamp.ws.client" overwrite="true"/>

<?xml version="1.0" encoding="UTF-8"?>

<project name="WebService" basedir="." default="gen-webservice">

<property file="build.properties">

<path id="project-classpath">

<fileset dir="${lib.dir}">

<include name="**/*.jar"/>

<target name="gen-webservice">

<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath"/>

<wsgen outputDirectory="${src.dir}"

wsdl="${wsdl.dir}" package="com.lamp.ws.client" overwrite="true"/>

如果你还想了解更多这方面的信息,记得收藏关注本站。