java调用.net webservice的完整实例

Java客户端调用Web Service的一般有以下三种方式:
生成的stub、proxy(动态代理)以及dispatch(动态调用接口)。dispatch又分为payload和message两种方式。
这个实例仅就dispatch的message方式进行介绍。

C#代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Web.Services.Description;



namespace WebService1

{

/// <summary>

/// Service1 的摘要说明

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。

// [System.Web.Script.Services.ScriptService]

[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)] 

public class Service1 : System.Web.Services.WebService

{





[WebMethod]

public string HelloWorld(string strHost)

{

return "Hello World, "+strHost;

}

}

}

 

Java调用程序

import java.util.Map;



import javax.xml.namespace.QName;

import javax.xml.soap.MessageFactory;

import javax.xml.soap.SOAPBody;

import javax.xml.soap.SOAPBodyElement;

import javax.xml.soap.SOAPElement;

import javax.xml.soap.SOAPMessage;

import javax.xml.ws.BindingProvider;

import javax.xml.ws.Dispatch;

import javax.xml.ws.Service;

import javax.xml.ws.WebServiceException;

import javax.xml.ws.soap.SOAPBinding;



public class WebServiceTest {



/**

* @param args

*/

public static final String targetNamespace = "http://tempuri.org/";

//服务名

public static final String serName = "Service1";

//端口名

public static final String pName = "5756";

//服务地址

public static final String endpointAddress = "http://localhost:5756/Service1.asmx?wsdl";

//方法名

public static final String OPER_NAME = "HelloWorld";

//参数名

public static final String INPUT_NMAE = "strHost";



public static void main(String[] args) throws Exception {

QName serviceName = new QName(targetNamespace, serName);

QName portName = new QName(targetNamespace, pName);



javax.xml.ws.Service service = Service.create(serviceName);

service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);



Dispatch<SOAPMessage> dispatch = service.createDispatch(portName,

SOAPMessage.class, Service.Mode.MESSAGE);



BindingProvider bp = (BindingProvider) dispatch;

Map<String, Object> rc = bp.getRequestContext();

rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);

rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, OPER_NAME);

MessageFactory factory = ((SOAPBinding)bp.getBinding()).getMessageFactory();



SOAPMessage request = factory.createMessage();

SOAPBody body = request.getSOAPBody();

QName payloadName = new QName(targetNamespace, OPER_NAME); 

SOAPBodyElement payload = body.addBodyElement(payloadName);



SOAPElement message = payload.addChildElement(INPUT_NMAE);

message.addTextNode("xyz");

SOAPMessage reply = null;



try

{

reply = dispatch.invoke(request);

}

catch (WebServiceException wse)

{

wse.printStackTrace();

}

SOAPBody soapBody = reply.getSOAPBody();

SOAPBodyElement nextSoapBodyElement = (SOAPBodyElement)soapBody.getChildElements().next (); 

SOAPElement soapElement = (SOAPElement)nextSoapBodyElement.getChildElements().next();



System.out.println("获取回应信息为:" + soapElement.getValue()); 

}

}

输出:

Hello World, xyz

你可能感兴趣的:(webservice)