最近在学习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>
<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>
<arg value="$\{basedir\}/src/test-schemas"></arg>
替换"${output.dir}/output.jar"成你想要的结果jar文档路径
生成客户端
接下来,我们需要添加一段代码在build文件中。这步将会生成客户端代码。
这步表示获取"WeatherForecas.wsdl" 文件,并且在指定的包"org.codehaus.xfire.weather."中生成控制接口.
classpath "generate.path" 需要包含XMLBeans库以及前面生成的类
源代码文件将会生成在"${src.output.dir}"中.
使用这个客户端
一旦你生成完毕你的客户端代理,最难部分结束.服务说提供的操作将会以方法(methods)的形式出现在客户端代码中,要调用服务,只要在客户端调用相关方法就可以了.
典型的客户端使用代码如下: