本文目录一览:
php做客户端,java做服务端,用webservice怎么交互
.java编写webservice服务端,php作为客户端调用.
1.首先我们写一个简单的java类并发布webservice.
package com.php;
import java.util.Map;
/**
* @author yangjuqi
* @createdate 2009-5-18 下午04:43:09
*
*/
public class WebServiceImpl {
public String sendTransact(Map map) throws Exception {
System.out.println("::: Call testModel1 :::");
if(map!=null){
String bugmanifestid = StringUtil.getValue(map.get("bugmanifestid"));
String editedby = StringUtil.getValue(map.get("editedby"));
String dditeddate = StringUtil.getValue(map.get("dditeddate"));
String fullinfo = StringUtil.getValue(map.get("fullinfo"));
String action = StringUtil.getValue(map.get("action"));
System.out.println("bugmanifestid -$amp;quot;$ +bugmanifestid);
System.out.println("editedby -$amp;quot;$ +editedby);
System.out.println("dditeddate -$amp;quot;$ +dditeddate);
System.out.println("fullinfo -$amp;quot;$ +fullinfo);
System.out.println("action -$amp;quot;$ +action);
}
return "success";
}
}
2.配置server-config.wsdd
deployment xmlns=""
xmlns:java=""
handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" /
handler name="auth"
type="java:com.php.AuthenticationHandler" /
handler name="URLLogging"
type="java:com.php.LogHandler"
parameter name="filename" value="c:\\MyService.log" /
/handler
service name="IWebService" provider="java:RPC"
parameter name="className"
value="com.php.WebServiceImpl" /
parameter name="allowedMethods" value="*" /
namespace;/namespace
/service
transport name="http"
requestFlow
handler type="URLMapper" /
handler type="URLLogging" /
/requestFlow
/transport
/deployment
3.发布到jboss后,访问 wsdl能看到xml文件就说明webservice发布好了。
4.写testphpweb.php文件
php
/*
* @author juqi yang $amp;amp;$gt;
* @create date 2009-05-18
*/
header("Content-Type: text/html; charset=GB2312");
echo " ::: PHP CALL JAVA-WEBSERVICE ::: br$amp;quot;$;
require_once("nusoap/lib/nusoap.php");
// 要访问的webservice路径
$NusoapWSDL=" wsdl";
// 生成客户端对象
$client = new soapclient($NusoapWSDL, true);
// 设置参数(注意:PHP只能以'数组集'方式传递参数,如果服务端是java,用Map接收)
$param = array( 'bugmanifestid' = 'E090500001',
'editedby' = '张三',
'dditeddate' = '2009-05-19',
'fullinfo' = '已联系刘德华,筹备今晚吃饭的事,等待回复',
'action' = '0');
echo "begin remote 。。。br$amp;quot;$;
// 调用远程方法
$result = $client-call('sendTransact', array($param));
echo "end remote 。。。br$amp;quot;$;
// 显示执行结果
if (!$err=$client-getError()){
echo '结果 : '.$result;
}else{
echo '错误 : '.$err;
}
5.启动apache,访问
php页面显示:
::: PHP CALL JAVA-WEBSERVICE :::
begin remote 。。。
end remote 。。。
结果 : success
jboss后台监视结果:
17:12:20,781 INFO [STDOUT] ::: Call testModel1 :::
17:12:20,781 INFO [STDOUT] bugmanifestid -E090500001
17:12:20,781 INFO [STDOUT] editedby -张三
17:12:20,781 INFO [STDOUT] dditeddate -2009-05-19
17:12:20,781 INFO [STDOUT] fullinfo -已联系刘德华,筹备今晚吃饭的事,等待回复
17:12:20,796 INFO [STDOUT] action -0
到此,php作为客户端调用java写的webservice服务端完成.
二,php编写webservice服务端,java作为客户端调用.
1.编写php webservice
php
/*
* @author juqi yang $amp;amp;$gt;
* @create date 2009-05-18
*/
header("Content-Type: text/html; charset=GB2312");
require_once("nusoap/lib/nusoap.php");
function sendManifest($param)
{
//把接收到的数据显示出来
return "hello ".$param["projectid"]."=$amp;quot;$.$param["projectname"]."=$amp;quot;$.$param["moduleid"];
}
$server = new nusoap_server();
//配置WSDL namespace
$server-configureWSDL('myservice', //服务名称
'', //tns指定的namespace,一般填写自己的URI
true, //endpoint url or false
'rpc', //服务样式
'', //传输协议,一直是这个。
'' //wsdl 'types'元素targetNamespace
);
// 注册web服务
$server-register('sendManifest', // 服务
array(
'projectid' = 'xsd:string',
'projectname' = 'xsd:string',
'moduleid' = 'xsd:string',
'modulepath' = 'xsd:string',
'bugtitle' = 'xsd:string',
'bugtype' = 'xsd:string',
'openedby' = 'xsd:string',
'openeddate' = 'xsd:string',
'assignedto' = 'xsd:string',
'assigneddate' = 'xsd:string',
'fixedtime' = 'xsd:string',
'fullinfo' = 'xsd:string',
'bugmanifestid' = 'xsd:string'), // 输入参数;数组,指定类型
array('resultCode' = 'xsd:string'), // 输出;数组,指定类型
'', // namespace of method
'', // soapaction
'rpc', // style
'encoded', // use
'serviceConsumeNotify' // documentation
);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) $HTTP_RAW_POST_DATA : '';
$server-service($HTTP_RAW_POST_DATA);
2.启动apache后,访问 ,如果页面如下图所示,表示webservice发布好了。
3.编写java客户端CallPhpServer .java 并调用php webservice
package com.php;
import java.util.HashMap;
import java.util.Map;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
* @author yangjuqi
* @createdate 2009-5-18 下午05:31:06
*
*/
public class CallPhpServer {
/**
* 测试方法
* @return
* @throws Exception
*/
public static String callManifest() throws Exception {
System.out.println("0");
Service service = new Service();
Call call = (Call) service.createCall();
System.out.println("1");
call.setTargetEndpointAddress(new java.net.URL(""));
call.setOperationName("sendManifest");
System.out.println("2");
Map map=new HashMap();
map.put("projectid", "109");
map.put("projectname", new String("新MM国际物流平台".getBytes(),"iso-8859-1"));
map.put("moduleid", "11");
map.put("modulepath", new String("财务管理".getBytes(),"iso-8859-1"));
map.put("bugtitle", new String("关于总账报表数据的问题".getBytes(),"iso-8859-1"));
map.put("bugtype", "TrackThings");
map.put("openedby", "zhangsan");
map.put("openeddate", "2009-05-31");
map.put("assignedto", "liumang");
map.put("assigneddate", "2009-05-31");
map.put("fixedtime", "2009-06-03");
map.put("fullinfo", new String("现在总账报表页面下的合计数据不对,烦请抓紧事件核实确认更正,谢谢!".getBytes(),"iso-8859-1"));
map.put("bugmanifestid", "E090500001");
call.addParameter("param", org.apache.axis.Constants.SOAP_ARRAY,javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
System.out.println("3");
Object obj=call.invoke(new Object[]{map});
return obj.toString();
}
public static void main(String[] args) throws Exception {
System.out.println("::: call php webservice :::");
String str = callManifest();
String result=new String(str.getBytes("iso-8859-1"),"GBK");
System.out.println(result);
}
}
控制台显示结果:
::: call php webservice :::
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
1
2
3
hello 109=新MM国际物流平台=11
到此,java作为客户端调用php的webservice服务端完成.
app服务端可以用java开发么
可以的,java最适合作为app服务端了,直接暴露rest服务就可以了。
REST 系统中所有的动作和要访问的资源都可以从H TTP和URI 中得到,这使得代理服务器、缓存服务器和网关很好地协调工作。而RPC模 型的SOAP 要访问的资源仅从 URI无法得知,要调用的方法也无法从 HTTP中得知,它们都隐藏在 SOAP 消息中。同样的,在REST系统中的代理服务器还可以通过 HTTP 的动作 (GET 、 POST)来进行控制。
java如何写webservice服务端
Java 中的 Web Service 分为基于 SOAP 的和基于 REST 的两种,下面简单说一个基于 SOAP 的例子。要使用 JDK6u4 之后的版本才能编译通过。
先编写一个 Web Service 的接口:
@WebService
@SOAPBinding(style = Style.RPC)
public interface TimeServer {
@WebMethod String getTimeAsString();
@WebMethod long getTimeAsElapsed();
}
再编写 Web Service 实现:
import java.util.Date;
import javax.jws.WebService;
@WebService(endpointInterface = "test.TimeServer")
public class TimeServerImpl implements TimeServer {
public String getTimeAsString() { return new Date().toString(); }
public long getTimeAsElapsed() { return new Date().getTime(); }
}
最后启动 Web Service:
public class TimeServerPublisher {
public static void main(String[ ] args) {
Endpoint.publish("", new TimeServerImpl());
}
}
如果正常启动,可以用浏览器访问 看到这个 Web Service 的 wsdl 文档。