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

猜你喜欢

转载自563432906.iteye.com/blog/2314148