由于在Jdeveloper工具中不能通过wsdl生成客户端代码,所以需要使用soap协议手动构造消息以及发送消息.
/** * 构造用户消息 * @return * @throws javax.xml.soap.SOAPException */ private static SOAPMessage createUserMessage() throws SOAPException, IOException { String send = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:DefaultNamespace\">"+ "<soapenv:Header/>" + "<soapenv:Body>" + "<urn:IN_FOLDERID>*</urn:IN_FOLDERID>" + "<urn:IN_RETURNSUBDEPTUSER>1</urn:IN_RETURNSUBDEPTUSER>" + "<urn:SYSID>"+SYSID+"</urn:SYSID>" + "<urn:SYSPWD>"+SYSPWD+"</urn:SYSPWD>" + "</soapenv:Body>" + "</soapenv:Envelope>"; InputStream is = new ByteArrayInputStream(send.getBytes("UTF-8")); //getBytes("UTF-8")解决soap报文传送时的中文乱码 return MessageFactory.newInstance().createMessage(null, is); }
/** * 发送消息 * @param url * @param message * @return * @throws javax.xml.soap.SOAPException */ private static SOAPBody sendMessage(String url,SOAPMessage message) throws SOAPException, TransformerException { SOAPConnection connection = soapConnFactory.createConnection(); SOAPMessage reply = null; try{ reply = connection.call(message, url); }catch (Exception e){ e.printStackTrace(); } SOAPBody soapBody=reply.getSOAPBody(); // if(isDebug){ //输出内容在控制台 // Transformer transformer = transformerFactory.newTransformer(); // transformer.setOutputProperty("encoding","GB2312");//这句话可以设置生成后的不乱码 // Source sourceContent = reply.getSOAPPart().getContent(); // StreamResult result = new StreamResult(System.out); // transformer.transform(sourceContent, result); // System.out.println(); // } connection.close(); return soapBody; }
通过获取服务端返回来的soap报文,然后解析该xml获取相应的结果数据。
/** * 获取用户 * @param pageIndex * @return */ public List<UserBean> getUserList() throws SOAPException, TransformerException, IOException, Exception { List<UserBean> userBeanList = new ArrayList<UserBean>(); String url = BPMConstants.SERVERURL + "/WF_GetUserListSrv?wsdl"; SOAPBody soapBody = SOAPUtil.sendMessage(url); SOAPElement soapElementFirst = (SOAPElement) soapBody.getFirstChild(); String nodeNameFirst = soapElementFirst.getNodeName(); if (nodeNameFirst.equals("ns0:GETUSERReturn")) { Iterator<SOAPElement> iteratorSecond = soapElementFirst.getChildElements(); while (iteratorSecond.hasNext()) { SOAPElement soapElementSecond = iteratorSecond.next(); String nodeNameSecond = soapElementSecond.getNodeName(); if (nodeNameSecond.equals("WF_ITEM")) { UserBean userBean = new UserBean(); Iterator<SOAPElement> iteratorThree = soapElementSecond.getChildElements(); while (iteratorThree.hasNext()) { SOAPElement soapElementThree = iteratorThree.next(); String nodeNameThree = soapElementThree.getNodeName(); if (nodeNameThree.equals("WF_USERID")) { userBean.setUserId(soapElementThree.getValue()); } else if (nodeNameThree.equals("WF_USERNAME")) { userBean.setUserName(soapElementThree.getValue()); } else if (nodeNameThree.equals("WF_FOLDERID")) { userBean.setFolderId(soapElementThree.getValue()); } else if (nodeNameThree.equals("WF_DEPTNAME")) { userBean.setDeptName(soapElementThree.getValue()); } } userBeanList.add(userBean); } } } return userBeanList; }
可以通过soapUI工具查看soap协议的所需要的构造消息格式以及返回来的报文xml格式
--摘自 OA移动接口项目 OaRest
相关推荐
- **字符编码**: 在构造SOAP消息时要注意字符编码问题,确保消息体中的内容与声明的编码一致。 - **异常处理**: 在实际应用中应加入异常处理逻辑,确保程序的健壮性。 综上所述,无论是使用VB.NET还是Java,通过...
1. **创建SOAP消息**:客户端首先需要构造一个SOAP消息,其中Body部分应包含调用Web Service的具体方法(如获取物流信息的函数)以及必要的参数(如订单号)。 2. **设置SOAP Envelope和Header**:根据WebService的...
这些库简化了SOAP消息的构造和解析过程,让开发者可以专注于业务逻辑,而不是底层通信细节。 总的来说,"webService Soap实例"是一个关于如何创建和使用SOAP Web服务的实践教程。它涵盖了服务端的实现、客户端的...
【标题】基于Servlet发送、接收SOAP消息的Java源程序 在Web服务开发中,SOAP(简单对象访问协议)是一种常见的消息传输协议,用于在不同系统间交换结构化和类型化的信息。Servlet作为Java Web应用程序的核心组件,...
SOAP基于XML(Extensible Markup Language),它定义了一个消息结构,使得应用程序可以发送和接收结构化的数据。SOAP消息通常包含三个主要部分:Header、Body和Envelope。Header包含了与消息处理相关的元信息,Body...
2. **创建SOAP请求**:在程序框图中,使用"创建SOAP请求"函数来构造向WebService发送的数据。这通常包括服务URL、操作名以及参数。 3. **配置SOAP头**:在SOAP请求中,需要设置SOAP头信息,如目标命名空间、操作名...
总结,金蝶通过SOAP调用第三方Webservice接口的过程主要包括:创建服务、创建Dispatch、构造SOAP消息、调用服务并处理响应以及解析响应数据。这个过程展示了不同系统间集成的基本步骤,对于理解和实现类似的集成工作...
在提供的"webServiceClient"文件中,很可能包含了一个示例Web服务客户端的代码,用于演示如何创建SOAP请求、发送请求并处理响应。此代码可能涉及到以下步骤: - 配置Web服务的WSDL地址。 - 创建SOAP消息,填充必要...
- 源代码文件:展示如何在PB9中创建和使用代理对象,以及如何构造和解析SOAP消息。 - SDK安装指南:解释如何安装和配置soapsdk,可能包括系统需求、安装步骤和环境变量设置。 - 示例Web服务的WSDL文件:提供Web服务...
总的来说,SOAP调用Web服务涉及到XML消息的构建、发送和解析,以及使用WSDL来定义和理解服务接口。尽管现在RESTful API更为流行,但在某些需要强类型检查、事务处理和互操作性的场景下,SOAP仍然是一个重要的选择。
- **创建SOAP消息**:客户端根据服务的WSDL(Web Service Description Language)文档,构造符合SOAP规范的请求消息。 - **发送请求**:客户端通过HTTP协议将SOAP消息发送到服务端的指定URL。 - **服务处理**:...
一个WebService通常通过Web服务器提供,并使用SOAP消息作为通信机制。 **VB6中的SOAP组件** VB6提供了内置的SOAP客户端组件,名为MSXML (Microsoft XML Core Services),使得VB6开发者可以轻松地与SOAP WebServices...
3. **构造SOAP消息**:根据WebService的WSDL(Web Service Description Language)文档,创建符合规范的SOAP请求XML。WSDL描述了服务的接口、操作、消息结构等信息,可以通过它获取方法签名和命名空间。 4. **发送...
客户端调试主要关注SOAP请求的构造和发送,包括验证SOAP信封的格式、参数传递的准确性以及异常处理机制。服务器端调试则侧重于服务实现的正确性,如业务逻辑的执行、数据库交互、安全性和性能优化等。确保两端的协调...
6. **调用Webservice**:作为客户端,你需要能够构造SOAP请求,将其发送到服务端,并处理返回的SOAP响应。这通常涉及创建一个QNetworkRequest对象,设置其URL和HTTP方法,然后使用QNetworkAccessManager发送请求。 ...
本文详细介绍了如何使用JavaScript调用Web Service并通过构造SOAP消息进行身份验证的过程。SOAP(Simple Object Access Protocol)是一种基于XML的轻量级协议,用于在网络中进行远程过程调用。本文主要涉及的知识点...
对于SOAP通信,通常需要构造一个XML文档作为SOAP消息,其中包含请求的SOAP头和SOAP体。在Qt中,可以使用QDomDocument和QDomElement等类来创建和操作XML文档。项目中应该展示了如何构建符合SOAP规范的XML请求,并将其...
通过这个压缩包,你可以学习如何创建和部署WebService,理解SOAP消息结构,编写客户端代码来调用服务,以及如何在实际项目中应用WebService实现跨平台的数据交换。此外,代码提示功能可能包含了一些预设的代码模板或...
qtsoap库是一个轻量级的库,专门设计用于处理SOAP消息,它可以解析和构造SOAP请求,同时处理返回的响应。 要使用qtsoap,首先需要在你的项目中包含相应的库。在Qt Creator中,这可以通过在.pro文件中添加如下行来...
【总结】综上所述,跨域调用SOAP服务的关键在于利用Nginx的反向代理功能,以及在客户端正确构造并发送SOAP请求。这种方法简化了客户端代码,避免了服务器代理的复杂性,同时保证了Web服务的正常调用。然而,这种方式...