JAVA调用PHP SOAP服务

来源:互联网 发布:现货行情软件 编辑:程序博客网 时间:2024/06/01 08:18

WebService即是一种跨平台的远程调用方法。一方提供服务,另一方使用服务。传输协议是HTTP,而传输的数据则是XML格式的数据。

它有两种方式,WSDL和SOAP。目前仅提及SOAP。

1.PHP提供SOAP服务

定义一个类,它里面有加、减和除三种操作

<?php class Operator{    public function add($x,$y){        return $x+$y;    }    public function substract($x,$y){        return $x-$y;    }    public function divide($x,$y){        return $x/$y;    }}?>

使用PHP SOAP API,提供SOAP服务。(需要开启SOAP EXTENSION)

<?php require("Operator.php");$server = new SoapServer(null,array('uri' => "http://localhost:8089"));$server->setClass("Operator");$server->handle();?>

假设提供服务的php为index.php

2.JAVA使用PHP提供的SOAP服务

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import javax.xml.soap.MessageFactory;import javax.xml.soap.Node;import javax.xml.soap.SOAPBody;import javax.xml.soap.SOAPConnection;import javax.xml.soap.SOAPConnectionFactory;import javax.xml.soap.SOAPElement;import javax.xml.soap.SOAPEnvelope;import javax.xml.soap.SOAPException;import javax.xml.soap.SOAPMessage;import javax.xml.soap.SOAPPart;public class Main {public void testSOAP(String opename,int x,int y){String url = "http://localhost:8089/index.php";SOAPConnectionFactory soapConnectionFactory = null;SOAPConnection soapConnection = null;MessageFactory messageFactory = null;SOAPMessage soapMessage = null;SOAPPart soapPart = null;SOAPEnvelope soapEnvelope = null;SOAPBody body = null;try{//建立连接soapConnectionFactory = SOAPConnectionFactory.newInstance();soapConnection = soapConnectionFactory.createConnection();messageFactory = MessageFactory.newInstance();soapMessage = messageFactory.createMessage();soapPart = soapMessage.getSOAPPart();soapEnvelope = soapPart.getEnvelope();//设置调用的webservice方法,及传参body = soapEnvelope.getBody();SOAPElement element = body.addChildElement(soapEnvelope.createName(opename));element.addChildElement("in0").addTextNode(String.valueOf(x));element.addChildElement("in1").addTextNode(String.valueOf(y));soapMessage.saveChanges();//获取返回值SOAPMessage reply = soapConnection.call(soapMessage,url);soapPart = reply.getSOAPPart();soapEnvelope = soapPart.getEnvelope();body = soapEnvelope.getBody();Node returnvalue = (Node) body.getChildElements().next();if (returnvalue != null) {              if (returnvalue.getChildNodes().item(0).getNodeName().equals("return")) {              List<HashMap<String,String>> ReturnArray = new ArrayList<HashMap<String,String>>();              for (int i=0;i<returnvalue.getChildNodes().item(0).getChildNodes().getLength();i++) {              String key = returnvalue.getChildNodes().item(0).getChildNodes().item(i).getNodeName();              String value = returnvalue.getChildNodes().item(0).getChildNodes().item(i).getNodeValue();              System.out.println(key+":"+value);              }              }        } else {              System.out.println("nothing returned");        }}catch(Exception ex){ex.printStackTrace();}finally{try {soapConnection.close();} catch (SOAPException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {Main main = new Main();System.out.println("3+4:");main.testSOAP("add",3,4);System.out.println("9-7:");main.testSOAP("substract",9,7);System.out.println("20/4:");main.testSOAP("divide",20,4);}}

运行结果如下:

3+4:
#text:7
9-7:
#text:2
20/4:
#text:5

0 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子缺锌手蜕皮裂开怎么办 宝宝读幼儿园哭怎么办 幼儿上课爱讲话怎么办 孩子上课总是乱跑怎么办 孩子听不懂老师讲课怎么办 高一上课听不懂怎么办 上课学生纪律差怎么办 一年级学生认字少怎么办 孩子上课做不住怎么办 幼儿园小孩上课乱跑怎么办 孩子挑食不爱吃饭怎么办 幼儿园孩子不听指令怎么办 1岁宝宝多动症怎么办 3岁宝宝胆小怎么办 爱挑食的孩子怎么办 小孩上课经常发呆怎么办 小孩不爱吃饭挑食怎么办 一年级小孩学习不好怎么办 宝宝上课坐不住怎么办 八个月婴儿拉稀怎么办 八个月孕妇拉稀怎么办 孩子好动爱喊怎么办 八个月小孩发烧怎么办 孩子好动怎么办学龄前教育 小孩好动症该怎么办 小孩子好动症该怎么办 怀孕5个月胎死亡怎么办 小孩多动调皮怎么办 手心老是出汗是怎么办 孩子吃饭特别慢怎么办 小孩子老想睡觉怎么办 孩子下午上课犯困怎么办 小孩子有多动症该怎么办 初中写作业犯困怎么办 孩子晚上学习困怎么办 小孩子容易兴奋激动怎么办 中考时过度兴奋怎么办 小孩兴奋不睡觉怎么办 孩子突然反常不听话怎么办? 婴儿亢奋不睡觉怎么办 宝宝听力筛查没通过怎么办