本文目录一览:
webservice如何发布,怎么得到wsdl
根据你的描述:
webservice的发布方法:
都是标准化的东西无非就是把service层暴露成webservice供异构语言平台使用
暴露有现成工具,框架,调用也有现成工具,框架
我用的是spring 集成 xfire 暴露webservice 直接加注解
Java code?
@Service("xxService")
@WebService(serviceName = "xxService", endpointInterface = "xx.xx.xx.xxService")
通过 项目名/xfire/ 访问所有暴露的webService如
发布的话把url或下载下来的xml文件给调用方自动生成调用代码即可
如何获取天气预报的wsdl
1、天气预报web services地址
用浏览器打开此地址,保存页面为Weather.xml
2、新建一个java工程 webservices
建立包名 com.test.ws
将Weather.xml拷贝到src目录下
3、编写批处理WSDL-SQUARED.CMD,使用wsdj2java生成客户端调用代码
set AXIS_HOME=D:\axis-1_4
set CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar-wsdlxml文件下载
java org.apache.axis.wsdl.WSDL2Java -p com.test.ws Weather.xml
SOAP返回的那个XML 文件怎么获取,
一. 必备知识
1.wsdl(web服务标记语言)
WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。
具体参考请访问下面网址
2.soap
SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。
具体参考请访问下面网址
3.php扩展
具体参考请访问下面网址
二. php soap开发模式
1. working in swdl mode(契约先行(Contract first)模式)
契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。也就是用soap通讯的时候必须先有一个定义过的服务接口,才能进行通讯。-wsdlxml文件下载
2. working in non-swdl mode(代码先行(Code first)模式)
在代码先行模式中,首先要先写出实现服务的代码。然后在大多数情况下,代码会产生一个契约,换种说法,一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此,PHP5的扩展并没有从代码输出一个WSDL的规定,考虑到这种情况,可以在non-WSDL模式下使用 SoapServer和SoapClient。也就是说在soap通讯的时候并不需要一个预先定义过的服务接口,代码会自动的产生。-wsdlxml文件下载
三.参考例子:
下面介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言,使用WSDL模式来实现服务和客户端会比较容易。
1. noWSDL模式实现
服务端 server.php
?php
class test
{
/**
*
* @return string
*/
function show()
{
return 'hello world!';
}
}
#####################################################
$server = new SoapServer(null, array('uri' = ""));
$server-setClass('test');
$server-handle();
?
客户端 client.php
?
$soap=new SoapClient(null, array(
'location' ='',
'uri' = ""));
print_r($soap-__getFunctions());
echo $soap-show();
?
2. WSDL模式实现
第一步:编写服务端类文件
class..php
?php
class test
{
/**
*
* @return string
*/
function show()
{
return 'hello world!';
}
}
?
第二步:将类文件生成 wsdl文件server.wsdl。
由于wsdl文件编写比较复杂,所以我们用第三方工具生成。我们以zend studio为例子演示:
Tools == WSDL Generator == Configration name : test; WSDL file name: server
==NEXT == 点击 + == 选择上面的创建的class.php == 这时候会看到一个 classes?? : URL Location的映射,保留 test类前面的勾,并将其url 设置为 SOAP Server的url: ==点击Finish,ZDE就会创建一个非常漂亮的WSDL了?? 工作基本上完成了.-wsdlxml文件下载
第三步:服务端编写:
?php
require ' class..php '; //引入类文件
$server = new SoapServer('server.wsdl');
$server-setClass('test');
$server-handle();
?
第四步:客户端编写
$soap = new SoapClient('http:// soapserver_url/server.wsdl');
print_r($soap-__getFunctions());
echo $soap-show();
以上两个例子只是一个简单的soap服务编写,已经可以满足大部分需要。如果需要更加高级的功能请参考其他方面的资料。
三. 出现的问题。
1.在方法中对属性的赋值在其他方法中不起作用。
比如在客户端调用服务端某个方法对某个属性赋值。
在其他方法里就不能用。但在 __construct 方法中对属性的赋值是可以个在其他方法中使用的。
2. 提示 Client] looks like we got no XML document错误。
服务器端文件在?php ? 标签前后都不要有任何数据包括空格,空行。
3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity
原因如下:PHP程序作为 SOAP客户端 采用 WSDL 模式访问远端服务器的时候,PHP是通过调用 libcurl 实现的。至少在 PHP5.2.X 是这样的。如果采用 non-WSDL 模式,就不需要 libcurl。在solaris 没有缺省安装 libcurl,也许是我没有安装。除了 了ibcurl以外,至少还关联的库包括:-wsdlxml文件下载
libidn,ibgcc,libiconv,libintl,openssl