你好:这个有点抽象,你可以了解下,主要是为了方便配置远程接口。\x0d\\x0d\传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service)。比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务"。通俗地说,"服务"就是计算机可以提供的某一种功能。\x0d\根据来源的不同,"服务"又可以分成两种:一种是"本地服务"(使用同一台机器提供的服务,不需要网络),另一种是"网络服务"(使用另一台计算机提供的服务,必须通过网络才能完成)。\x0d\举例来说,我现在有一批,需要把它们的大小缩小一半。那么,我们可以把"缩放"看成是一种服务。你可以使用"本地服务",在自己计算机上用软件缩小,也可以使用"网络服务",将上传到某个网站,让服务器替你缩小,完成后再通过网络送回给你。这就好比,一件事你可以自己做,也可以交给另一个人去做。肚子饿了,你可以自己做饭,也可以打电话去订一份比萨,让店家替你做好送上门。\x0d\"网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源。\x0d\举例来说,去年我写过一个"四川大地震墙",它能动态显示关于四川地震的最新。但是,所有的都不是储存在我的服务器上,而是来自flickrcom。我只是发出一个动态请求,要求flickrcom向我提供。这种情况下,flickrcom提供的就是一种Web service。如果我把都存放在本地服务器,不调用flickrcom,那么我就是在使用"本地服务"。\x0d\所以,Web service让你的网站可以使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。\x0d\\x0d\WSDL(Web Service Description Language)Web服务器描述语言是用XML文档来描述Web服务的标准,是Web服务的接口定义语言,由Ariba、Intel、IBM、MS等共同提出,通过WSDL,可描述Web服务的三个基本属性:\x0d\·服务做些什么——服务所提供的 *** 作(方法)\x0d\·如何访问服务——和服务交互的数据格式以及必要协议\x0d\·服务位于何处——协议相关的地址,如URL
Java调用WebService可以直接使用Apache提供的axisjar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。
1、编写代码方式:
package comyuduntest;
import javarmiRemoteException;
import orgapacheaxisclientCall;
import orgapacheaxisclientService;
import orgapacheaxismessagePrefixedQName;
import orgapacheaxismessageSOAPHeaderElement;
import comcezannegoldenuserException;
import comcezannegoldenuserUserManagerServiceProxy;
import javaxxmlnamespaceQName;
import javanetMalformedURLException;
import javaxxmlrpcServiceException;
import javaxxmlsoapName;
import javaxxmlsoapSOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//标识Web Service的具体路径
String endpoint = "WebService服务地址";
// 创建 Service实例
Service service = new Service();
// 通过Service实例创建Call的实例
Call call = (Call) servicecreateCall();
//将Web Service的服务路径加入到call实例之中
callsetTargetEndpointAddress( new javanetURL(endpoint) );//为Call设置服务的位置
// 由于需要认证,故需要设置调用的SOAP头信息。
Name headerName = new PrefixedQName( new QName("发布的wsdl里的targetNamespace里的url", "string_itemName") );
orgapacheaxismessageSOAPHeaderElement header = new SOAPHeaderElement(headerName);
headeraddTextNode( "blablabla" );
calladdHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("发布的wsdl里的targetNamespace里的url", "SoapHeader");
webservice 使用说明书,就是wsdl
wsdl说明是是基于xml格式的
通过wsdl说明书,就可以完整的描述一个服务端对外发布的服务
生成客户端调用代码:
语法1: wsimport -s wsdl说明书地址
语法2:wsimport -keep -p 包名称 wsdl说明书地址
直接用cmd控制调用上面代码,把生成的代码直接复制到你的项目中,就可以使用了
有jar包没有被导出来。
或者在你生成的执行文件中没有包含程序运行所需要的jar包。
按照错误提示,你可以找找axiom-impljar 这个包是不是有什么问题。
还有一种可能,你可以试试, 就是在运行这个可执行文件的时候用右键,选“以管理员的方式运行”
一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。
这些元素嵌套在definitions元素中,
(1) Definitions是WSDL文档的根元素。对应于这个类: orgeclipsewstwsdlDefinition 其他的对象都可以通过这个对象获得
(2) Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
(3) Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
(4) PortType - 对于某个访问入口点类型所支持的 *** 作的抽象集合,这些 *** 作可以由一个或多个服务访问点来支持。
(子节点) Operation - 对服务中所支持的 *** 作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
(5) Binding - 特定端口类型的具体协议和数据格式规范的绑定。
(6) Service- 相关服务访问点的集合。
(子节点) Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
下面是代码实例:
import javaioFile; import javaioIOException; import javautilIterator; import javautilList; import javautilMap; import javautilSet; import javaxwsdlMessage; import javaxwsdlPart; import javaxwsdlPortType; import javaxxmlnamespaceQName; import orgeclipseemfcommonutilURI; import orgeclipseemfecoreresourceResource; import orgeclipseemfecoreresourceResourceSet; import orgeclipseemfecoreresourceimplResourceSetImpl; import orgeclipsewstwsdlDefinition; import orgeclipsewstwsdlTypes; import orgeclipsewstwsdlinternalimplPartImpl; import orgeclipsewstwsdlinternalutilWSDLResourceFactoryImpl; import orgeclipsewstwsdlutilWSDLResourceImpl; import orgeclipsexsdXSDElementDeclaration; import orgeclipsexsdXSDSchema; import orgeclipsexsdutilXSDResourceImpl; import orgjunitTest; import orgjunitBefore; public class WSDLParserWithEclipse { Definition definition=null; String wsdlPathString="E:/HelloEclipse-EMF-WSDL-XSD/testwsdl"; @Before public void setup(){ ResourceSet resourceSet = new ResourceSetImpl(); ResourceFactoryRegistry registry = resourceSetgetResourceFactoryRegistry(); Map extensionToFactoryMap = registrygetExtensionToFactoryMap(); extensionToFactoryMapput("wsdl", new WSDLResourceFactoryImpl()); File wsdlFile =new File(wsdlPathString); URI uri = URIcreateFileURI(wsdlFilegetAbsolutePath()); // You can avoid this cast, but will have to cast anyway later to get the Definition out the resource contents WSDLResourceImpl wsdlResource = (WSDLResourceImpl) resourceSetcreateResource(uri); try { wsdlResourceload(null); definition = wsdlResourcegetDefinition(); }catch(Exception e){ eprintStackTrace(); } } @Test public void testTypes(){ Types types = definitiongetETypes(); List schemas = typesgetSchemas(">
运行命令WSDL2Java。
生成服务端代码命令是WSDL2Javauriwsdl文件全路径p包名dxmlbeanss,sssdssio生成的java代码存放路径。生成客户端包代码命令是WSDL2Java至uriwsdl文件全路径p包名dxmlbeansso生成的java代码存放路径。
源码就是指编写的最原始程序的代码。运行的软件是要经过编写的,程序员编写程序的过程中需要他们的语言。音乐家用五线谱和音符,建筑师用图纸和笔,那程序员的工作的语言就是源码了。
在大多数情况下我们都需要为我们的服务提供一个WSDL文件,而 Axis2's Java2WSDL 是专门用来生成WSDL文件的D专用工具,如果你要在命令行模式下进行生成WSDL文件,首先需要保证你的环境变量AXIS2_HOME是否已经配置OK,同时还要保证把%AXIS2_HOME%\bin加入到你的path环境中,要生成 WSDL文件,首先要保证你的class能够编译成功,而且已经编译成功,然后进入class文件编译后的根目录(在JBuilder中是classes,在Eclipse中是bin目录)这时,生成WSDL文件的准备工作已经OK。\x0d\\x0d\下面是生成WSDL文件时的可选参数和参数说明:\x0d\---------------------------------------------------------------------------------\x0d\Usage java2wsdl -cn : class file name\x0d\-o : output file location\x0d\\x0d\-cp : list of classpath entries - (urls)\x0d\\x0d\-tn : target namespace\x0d\\x0d\-tp : target namespace prefix\x0d\\x0d\-stn : target namespace for schema\x0d\\x0d\-stp : target namespace prefix for schema\x0d\\x0d\-sn : service name\x0d\\x0d\-of : output file name for the WSDL\x0d\\x0d\-st : style for the WSDL\x0d\\x0d\-u : use for the WSDL\x0d\\x0d\-l : address of the port for the WSDL\x0d\\x0d\-nsg : fully qualified name of the class that implements NamespaceGenerator\x0d\\x0d\-p2n [,,] \x0d\\x0d\-efd : Setting for elementFormDefault (defaults to qualified)\x0d\\x0d\-afd : Setting for attributeFormDefault (defaults to qualified)\x0d\\x0d\-xc : Extra class for which schematype must be generated\x0d\Use as : -xc class1 -xc class2 \x0d\\x0d\\x0d\\x0d\\x0d\\x0d\典型地,进入你的工程的二进制编译根目录,执行命令模板如下:\x0d\java2wsdl -cp -cn [PACKAGENAME][CLASSNAME]-of [FILENAME]wsdl\x0d\\x0d\现在我们假设在sampleshelloworldserviceaxiom;包下面有个HelloWorldService类,工程的类文件编译后存放在build\classes目录下,那么,首先进入该目录中,然后执行以下命令:\x0d\java2wsdl -cp -cn sampleshelloworldserviceaxiomHelloWorldService -of HelloWorldServicewsdl\x0d\\x0d\执行后的CMD提示如下说明已经成功执行了:\x0d\\x0d\Using AXIS2_HOME: D:\axis2-111\x0d\Using JAVA_HOME: C:\Program Files\Java\jdk150_06
以上就是关于WebService中的wsdl文件作用是什么全部的内容,包括:WebService中的wsdl文件作用是什么、如何用java来获取webservice数据、怎么用Java通过wsdl地址调用WebService求代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)