jre6.0加入了对WebService的支持,不用再使用开源类库了。
看看这样一段代码:
查看源代码?01 @WebService(name="TestWS",
02 服务名称=“TestWS”)
03 公共类TestWS {
04 /**
05 * 测试相加方法
06 * @参数x
07 * @参数y
08 * @返回
09*/
10 @WebMethod
11 公共int测试方法(int x,int y){
12 返回x+y;
13}
14}
查看源代码?01 <PRE class=brush:java>/**
02 * @作者 v.xieping
03 *
04*/
05公开课节目表{
06 /**
07 * @参数参数
08*/
09 公共静态无效主(字符串[]参数){
10 端点.发布(
11“ http://192.168.53.43:8090/CSEventWS/TestWS ”,
12 新的TestWS());
13 ThreadWaitor.keepWait();
14}
15}
16 </上>
如此使用
查看源代码?1 http://192.168.53.43:8090/CSEventWS/TestWS
查看sourceprint?1这个地址就可以访问到这个WebService。
查看源代码?1
查看源代码?1但是有一个奇怪的问题是,我是一个nusoap类库不能像以前一样调用成功。经试验发现三个问题。
查看源码打印?1 1、WSDL问题
查看源打印?1但是使用地址<PRE class=brush:java>http://192.168.53.43:8090/CSEventWS/TestWS</PRE>
2 <PRE class=brush:java>还是地址</PRE>
3 <PRE class=brush:java><PRE class=brush:java>http://192.168.53.43:8090/CSEventWS/TestWS?wsdl</PRE>
4 <PRE class=brush:java>在创建nusoap对象时,都不能认为他是wsdl。无论这两个地址都是非wsdl的。</PRE>
5 <PRE class=brush:java></PRE>
6 </上>
查看源代码?1 2、命名空间问题
查看sourceprint?1 大家都知道一般开发中,使用的命名空间都是“http://tempuri.org/”,但是这里不是,而是变成了http://ws.csevent/ 。
查看源打印?1 可以使用 <PRE class=brush:java>http://192.168.53.43:8090/CSEventWS/TestWS?wsdl</PRE>
2 <PRE class=brush:java>这样的地址查看 <definitions targetNamespace=" http://ws.csevent/ " name="TestWS"></PRE>
3 <PRE class=brush:java></PRE>
3、参数问题
一般 WSDL 地址的参数是和名称相关的。但是这里不是,而使用
$params = array('arg0' => 100,'arg1' => 200);
这种方式定义。
可以通过http://192.168.53.43:8090/CSEventWS/TestWS?wsdl查看
<类型>−<xsd:架构><xsd:导入命名空间=“ http://ws.csevent/ ”schemaLocation=“ http://192.168.53.43:8090/CSEventWS/TestWS?xsd=1” / ></xsd:schema></types><类型>
−<xsd:架构>
<xsd:import 命名空间=“ http://ws.csevent/ ”
schemaLocation =“ http://192.168.53.43:8090/CSEventWS/TestWS?xsd=1 ”/>
</xsd:架构>
</类型>
再继续打开http://192.168.53.43:8090/CSEventWS/TestWS?xsd=1就可以看到用的参数名称。
<xs:complexType name="测试方法">
−
<xs:序列>
<xs:元素名称=“arg0”类型=“xs:int”/>
<xs:元素名称=“arg1”类型=“xs:int”/>
</xs:序列>
</xs:复杂类型>
最终调用为:
注意:以下代码是使用的slightphp框架。实现了对nusoap的初级包装。
$objSoap = new HTTP_SOAP();
$client = $objSoap->getClient($this->url,false);
$params = array('arg0' => 100,'arg1' => 200);
$r = $client->call('TestMethod',$params ,'http://ws.csevent/','',false,true);
Debug_Util::log($r,"service.log");