XMLBeans 客户端生成

   最近在学习XFire,调用.net发布的webservice,生成客户端代理的过程中出现了一些NollPointerException,问题很可能出现在wsdl文档中。查找了一些资料作全面检查,作了简单的翻译,不足之处请谅解。


Web service客户端可以从一个WSDL文件用Ant task来创建。创建一个客户端服务需要2步。

首先,你需要使用XMLBeans来根据WSDL文档生成types,然后使用XFire自带的生成器来创建客户端代码。

不幸的是,这个流程并不适合RPC/Encoded service,

不管怎样,rpc/encoded文档仍然可以由之前片断的重要方法中手动构造。


创建XMLBeans

这时,你可以发现看XMLBeans的文档很有用,这里提供一个怎样生成XMLBeans的快速总结。

 生成XMLBeans 仅仅需要在你的Ant build文件或者你的Maven文件中添加几行代码.
<java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"></java>  <java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"></java>              <arg value="$\{destination.class.directory\}"></arg>
<arg value="$\{basedir\}/src/test-schemas"></arg>    

xml 代码

 

  1. <java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"  
  2.           classpathref="task.path"  
  3.           fork="true">  
  4.       <arg value="-d"/>  
  5.       <arg value="$\{destination.class.directory\}"/>  
  6.       <arg value="$\{basedir\}/src/test-schemas"/>  
  7.     java>  


      <arg value="-d"></arg>
    这将把XMLBeans 类输出到文件夹"${destination.class.directory}".它将访问"${basedir}/src/test-schemas"文件夹来查找所有的WSDL以及XSD文件,用来生成types.你还需要设置一个路径用来指示XMLBeans需要的jar文档,在这里,它是"task.path".

 

它还可以为XMLBeans类打包生成一个jar挡,像这样

<java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"></java>      <java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"></java>          

xml 代码
  1.   
  2. <java classname="org.apache.xmlbeans.impl.tool.SchemaCompiler"  
  3.           classpathref="task.path"  
  4.           fork="true">  
  5.       <arg value="-out"/>  
  6.       <arg value="$\{output.dir\}/output.jar"/>  
  7.       <arg value="$\{basedir\}/src/test-schemas"/>  
  8.     java>  

      <arg value="$\{basedir\}/src/test-schemas"></arg>
   

替换"${output.dir}/output.jar"成你想要的结果jar文档路径

生成客户端

接下来,我们需要添加一段代码在build文件中。这步将会生成客户端代码。

xml 代码
  1. <path id="generate.path">  
  2.       <pathelement path="..."/>  
  3.       ... more path elements   
  4.     path>      
  5.   
  6.     <taskdef name="generate"    
  7.              classname="org.codehaus.xfire.xmlbeans.generator.GeneratorTask"  
  8.              classpathref="generate.path"/>  
  9.   
  10.     <generate overwrite="true"  
  11.               package="org.codehaus.xfire.weather"  
  12.               outputDir="$\{src.output.dir\}"  
  13.               wsdl="${basedir}/src/test-schemas/WeatherForecast.wsdl"  
  14.               classpathref="generate.path" />  

 这步表示获取"WeatherForecas.wsdl" 文件,并且在指定的包"org.codehaus.xfire.weather."中生成控制接口.

 classpath "generate.path" 需要包含XMLBeans库以及前面生成的类

 源代码文件将会生成在"${src.output.dir}"中.


使用这个客户端

一旦你生成完毕你的客户端代理,最难部分结束.服务说提供的操作将会以方法(methods)的形式出现在客户端代码中,要调用服务,只要在客户端调用相关方法就可以了.

典型的客户端使用代码如下:

java 代码
  1. ItemLookupDocument req = ItemLookupDocument.Factory.newInstance();   
  2.   
  3. // .... Fill in the request object   
  4.   
  5. // Invoke the service   
  6. AWSECommerceServiceClient client = new AWSECommerceServiceClient();   
  7. ItemLookupResponseDocument res = client.ItemLookup(req);   
  8.   
  9. // Do stuff with the response  

你可能感兴趣的:(java,apache,maven,ant,webservice)