`

WebService的SOAP构造及发送消息

 
阅读更多

由于在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

  • 大小: 49.2 KB
  • 大小: 134.1 KB
分享到:
评论

相关推荐

    VB.NET/JAVA 采用SOAP 与Webservice发送/接收数据

    - **字符编码**: 在构造SOAP消息时要注意字符编码问题,确保消息体中的内容与声明的编码一致。 - **异常处理**: 在实际应用中应加入异常处理逻辑,确保程序的健壮性。 综上所述,无论是使用VB.NET还是Java,通过...

    客户端调用webservice方式一(soap请求)

    1. **创建SOAP消息**:客户端首先需要构造一个SOAP消息,其中Body部分应包含调用Web Service的具体方法(如获取物流信息的函数)以及必要的参数(如订单号)。 2. **设置SOAP Envelope和Header**:根据WebService的...

    webService Soap实例

    这些库简化了SOAP消息的构造和解析过程,让开发者可以专注于业务逻辑,而不是底层通信细节。 总的来说,"webService Soap实例"是一个关于如何创建和使用SOAP Web服务的实践教程。它涵盖了服务端的实现、客户端的...

    基于Servlet发送、接收SOAP消息的java源程序

    【标题】基于Servlet发送、接收SOAP消息的Java源程序 在Web服务开发中,SOAP(简单对象访问协议)是一种常见的消息传输协议,用于在不同系统间交换结构化和类型化的信息。Servlet作为Java Web应用程序的核心组件,...

    用Soap调用webservice接口

    SOAP基于XML(Extensible Markup Language),它定义了一个消息结构,使得应用程序可以发送和接收结构化的数据。SOAP消息通常包含三个主要部分:Header、Body和Envelope。Header包含了与消息处理相关的元信息,Body...

    LabView调用WebService接口的各种操作

    2. **创建SOAP请求**:在程序框图中,使用"创建SOAP请求"函数来构造向WebService发送的数据。这通常包括服务URL、操作名以及参数。 3. **配置SOAP头**:在SOAP请求中,需要设置SOAP头信息,如目标命名空间、操作名...

    金蝶调用Webservice接口-SOAP

    总结,金蝶通过SOAP调用第三方Webservice接口的过程主要包括:创建服务、创建Dispatch、构造SOAP消息、调用服务并处理响应以及解析响应数据。这个过程展示了不同系统间集成的基本步骤,对于理解和实现类似的集成工作...

    webservice 调用实例soap协议

    在提供的"webServiceClient"文件中,很可能包含了一个示例Web服务客户端的代码,用于演示如何创建SOAP请求、发送请求并处理响应。此代码可能涉及到以下步骤: - 配置Web服务的WSDL地址。 - 创建SOAP消息,填充必要...

    PB9-soap-WEBSERVICE例子.rar

    - 源代码文件:展示如何在PB9中创建和使用代理对象,以及如何构造和解析SOAP消息。 - SDK安装指南:解释如何安装和配置soapsdk,可能包括系统需求、安装步骤和环境变量设置。 - 示例Web服务的WSDL文件:提供Web服务...

    SOAP调用webservice例子

    总的来说,SOAP调用Web服务涉及到XML消息的构建、发送和解析,以及使用WSDL来定义和理解服务接口。尽管现在RESTful API更为流行,但在某些需要强类型检查、事务处理和互操作性的场景下,SOAP仍然是一个重要的选择。

    Soap方式调用WebService

    - **创建SOAP消息**:客户端根据服务的WSDL(Web Service Description Language)文档,构造符合SOAP规范的请求消息。 - **发送请求**:客户端通过HTTP协议将SOAP消息发送到服务端的指定URL。 - **服务处理**:...

    VB6 & SOAP & WebService

    一个WebService通常通过Web服务器提供,并使用SOAP消息作为通信机制。 **VB6中的SOAP组件** VB6提供了内置的SOAP客户端组件,名为MSXML (Microsoft XML Core Services),使得VB6开发者可以轻松地与SOAP WebServices...

    VC++(MFC)中WebService服务的调用

    3. **构造SOAP消息**:根据WebService的WSDL(Web Service Description Language)文档,创建符合规范的SOAP请求XML。WSDL描述了服务的接口、操作、消息结构等信息,可以通过它获取方法签名和命名空间。 4. **发送...

    soap webservice调试PDF

    客户端调试主要关注SOAP请求的构造和发送,包括验证SOAP信封的格式、参数传递的准确性以及异常处理机制。服务器端调试则侧重于服务实现的正确性,如业务逻辑的执行、数据库交互、安全性和性能优化等。确保两端的协调...

    qt soap 学习webservice 的小例子

    6. **调用Webservice**:作为客户端,你需要能够构造SOAP请求,将其发送到服务端,并处理返回的SOAP响应。这通常涉及创建一个QNetworkRequest对象,设置其URL和HTTP方法,然后使用QNetworkAccessManager发送请求。 ...

    js调用webservice构造SOAP进行身份验证

    本文详细介绍了如何使用JavaScript调用Web Service并通过构造SOAP消息进行身份验证的过程。SOAP(Simple Object Access Protocol)是一种基于XML的轻量级协议,用于在网络中进行远程过程调用。本文主要涉及的知识点...

    qt-soap-webservice

    对于SOAP通信,通常需要构造一个XML文档作为SOAP消息,其中包含请求的SOAP头和SOAP体。在Qt中,可以使用QDomDocument和QDomElement等类来创建和操作XML文档。项目中应该展示了如何构建符合SOAP规范的XML请求,并将其...

    WebService教程+实例+代码提示功能WebService实例.rar

    通过这个压缩包,你可以学习如何创建和部署WebService,理解SOAP消息结构,编写客户端代码来调用服务,以及如何在实际项目中应用WebService实现跨平台的数据交换。此外,代码提示功能可能包含了一些预设的代码模板或...

    Qt连接webservice,qtsoap

    qtsoap库是一个轻量级的库,专门设计用于处理SOAP消息,它可以解析和构造SOAP请求,同时处理返回的响应。 要使用qtsoap,首先需要在你的项目中包含相应的库。在Qt Creator中,这可以通过在.pro文件中添加如下行来...

    跨域WebService请求-Nginx_SOAP服务_Ajax客户端.docx

    【总结】综上所述,跨域调用SOAP服务的关键在于利用Nginx的反向代理功能,以及在客户端正确构造并发送SOAP请求。这种方法简化了客户端代码,避免了服务器代理的复杂性,同时保证了Web服务的正常调用。然而,这种方式...

Global site tag (gtag.js) - Google Analytics