php soap服务,JAVA调用PHP SOAP服务

c# 设置axwindows的User-agent信息

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

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

1.PHP提供SOAP服务

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

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)

require("Operator.php");

$server = new SoapServer(null,array('uri' => ":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 = ":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> ReturnArray = new ArrayList>();

for (int i=0;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 block

e.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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值