`
mimang2007110
  • 浏览: 237189 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

两个java web服务间SoapMessage对象的传递

 
阅读更多

客户端代码:

try
            {
                // 创建连接对象并呼叫AP
                SOAPConnection conn = SOAPConnectionFactory.newInstance().createConnection();
                SOAPMessage resMsg = conn.call(reqMsg, apUrl);
                
                // 获取AP的响应消息
                String msg = "";
                if (null == resMsg)
                {
                    msg = getResponse(servletContext, currOperaId, 0);
                }
                else
                {
                    // 接收对方返回的SOAPMessage对象并转成字符串
                    Document doc = resMsg.getSOAPPart().getEnvelope().getOwnerDocument();
                    StringWriter output = new StringWriter();
                    TransformerFactory.newInstance()
                        .newTransformer()
                        .transform(new DOMSource(doc), new StreamResult(output));
                    msg = output.toString();
                }
                
                // 移除servlet上下文中存储的消息
                servletContext.removeAttribute(id);
                
                return msg;
            }
            catch (Exception ex)
            {
                logger.error(Global.LOG_EXCEPTION_NAME, ex);
                return "";
            }
 

服务器端代码:

try
        {
            // 把请求流转换成字符串
            int i = -1;
            InputStream is = request.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((i = is.read()) != -1)
            {
                baos.write(i);
            }
            String content = baos.toString();
            
            // 在响应流中写入SoapMessage对象
            int num = (int)(Math.random() * 10) % 2;
            response.setContentType("text/xml; charset=utf-8");
            response.setHeader("Connection", Global.KEEP_LIVE);
            response.setHeader("User-Agent", "gSOAP/2.7");
            SOAPMessage soap = Global.formartSoapString(PressureTool.createUploadResponse(num));
            OutputStream os = response.getOutputStream();
            soap.writeTo(os);
            os.close();
        }
        catch (Exception e)
        {
            logger.error("", e);
        }
 

注:Global.formartSoapString(PressureTool.createUploadResponse(num))代码如下:

/**
     * <创建UploadResponse事件的字符串>
     * <功能详细描述>
     * @param bool 1成功0失败
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static String createUploadResponse(int bool)
    {
        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        sb.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:cwmp=\"urn:dslforum-org:cwmp-1-1\">");
        sb.append("<SOAP-ENV:Header><cwmp:ID>1484</cwmp:ID></SOAP-ENV:Header>");
        sb.append("<SOAP-ENV:Body SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">");
        
        if (1 == bool)
        {
            sb.append("<cwmp:UploadResponse><Status>0</Status><StartTime>");
            sb.append(Global.getCurrentTime());
            sb.append("</StartTime><CompleteTime>");
            sb.append(Global.getCurrentTime());
            sb.append("</CompleteTime>");
            sb.append("</cwmp:UploadResponse>");
        }
        else
        {
            sb.append("<SOAP-ENV:Fault><faultcode>Client</faultcode><faultstring>CWMP fault</faultstring>");
            sb.append("<detail><cwmp:Fault><FaultCode>9011</FaultCode><FaultString>Upload failure</FaultString></cwmp:Fault>");
            sb.append("</detail></SOAP-ENV:Fault>");
        }
        sb.append("</SOAP-ENV:Body></SOAP-ENV:Envelope>");
        return sb.toString();
    }
 

/**
     * <把soap字符串格式化为SOAPMessage>
     * <功能详细描述>
     * @param soapString
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static SOAPMessage formartSoapString(String soapString)
    {
        MessageFactory msgFactory;
        try
        {
            msgFactory = MessageFactory.newInstance();
            SOAPMessage reqMsg =
                msgFactory.createMessage(new MimeHeaders(),
                    new ByteArrayInputStream(soapString.getBytes(Charset.forName("UTF-8"))));
            reqMsg.saveChanges();
            return reqMsg;
        }
        catch (Exception e)
        {
            logger.error(EXCEPTION_NAME, e);
            return null;
        }
    }
 

 

 

分享到:
评论
1 楼 qwe2252099 2014-06-20  
给力!简单易懂

相关推荐

    利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务

    标题中的“利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务”指的是使用Java开发Web服务,特别是基于SOAP(Simple Object Access Protocol)的消息传递协议。SOAP是一种用于交换结构化和类型化信息...

    .NET调用JAVA web 服务

    Web服务是一种基于互联网的软件组件,它使用标准的XML(可扩展标记语言)进行数据交换,通常采用SOAP(简单对象访问协议)作为消息传输协议,并通过WSDL(Web服务描述语言)来描述服务接口。Java Web服务通常使用JAX...

    Java Web 整合开发 完全自学手册 源代码

    9. **Web Services**:理解SOAP和RESTful两种Web服务的原理,使用JAX-WS和JAX-RS创建和调用Web服务。 10. **Spring框架**:Spring是Java Web开发中的主流框架,提供了依赖注入、AOP(面向切面编程)、数据访问、...

    Java Web程序开发范例宝典 (源码) (上集)

    8. **JMS(Java Message Service)**:消息传递接口,用于异步通信,可能包含发布/订阅和点对点的消息传递示例。 9. **Web服务**:如SOAP(Simple Object Access Protocol)和RESTful服务的创建和调用,可能是通过...

    Java Web开发详解.rar

    9. **Struts、JSF(JavaServer Faces)**:这两个是Java Web的MVC框架,分别提供了不同的方法来组织和控制Web应用的逻辑。 10. **Web服务**:包括SOAP(Simple Object Access Protocol)和REST(Representational ...

    利用DOM4J解析SOAP的简单示例

    SOAP消息通常包含一个Header和一个Body,用于传递元数据和实际业务数据。DOM4J是一个强大的Java库,用于处理XML文档,包括读取、写入、修改和解析。本篇文章将深入探讨如何利用DOM4J解析SOAP消息中的元素,以便在...

    webservice定制发布实例(java版)

    通过以上步骤,你可以成功地创建和发布一个Java版的定制Web服务,无论是RPC还是Message风格,都能有效地传递自定义对象。这使得开发者能够轻松地实现跨平台、跨语言的数据交换,促进了系统的集成和扩展。

    saaj soap动态调用

    2. **SOAPPart和SOAPEnvelope**:`SOAPMessage`对象包含一个`SOAPPart`,它是整个SOAP消息的容器。`SOAPPart`又包含一个`SOAPEnvelope`,表示SOAP消息的XML结构。 3. **SOAPHeader和SOAPBody**:`SOAPEnvelope`对象...

    JAVA的WebService支持.rar

    总结来说,Java的WebService支持涵盖了从设计、开发到部署的全过程,涉及了CXF和Axis这样的Web服务框架,以及WSDL和SOAP这两个关键的通信规范。理解并掌握这些知识,对于构建和集成跨平台的分布式系统至关重要。

    AXIS2 RCP/literal样式,两种MESSAGE定义方式SOAP的payload

    总结起来,AXIS2 RCP/literal样式中的两种MESSAGE定义方式对于开发和调试SOAP Web服务客户端至关重要。硬编码XML字符串适用于简单场景,而JOM更适合处理复杂的业务逻辑和数据结构。TCPMon作为一个实用的辅助工具,...

    使用SAAJ 和JAXM的 SOAP客户端及服务

    总的来说,SAAJ和JAXM为Java开发者提供了强大的工具,以便在Web服务环境中创建高效的SOAP客户端和服务,处理复杂的XML消息传递需求。理解这两个API的工作原理及其交互方式,是构建和维护高质量的SOAP应用程序的关键...

    java调用webservice的demo

    Java调用Web Service是开发过程中常见的一项任务,主要用于不同系统间的接口交互,实现服务的消费。本示例提供了一个完整的Java调用Web Service的源码Demo,名为`CallWebServiceClientDemo`,它可以帮助开发者理解并...

    JAVA EE WEB高级开发案例

    6. **Web服务**:Java EE支持SOAP和RESTful两种类型的Web服务。SOAP(Simple Object Access Protocol)基于XML,适合于需要强类型和契约的场景;REST(Representational State Transfer)则更加轻量级,基于HTTP协议...

    Java 服务器高级编程

    6. **Web服务**:Java服务器高级编程还会涵盖SOAP(简单对象访问协议)和RESTful Web服务的实现。JAX-WS和JAX-RS分别是Java用于创建SOAP和RESTful服务的API。 7. **高性能和可伸缩性**:通过负载均衡、集群、缓存...

    Java创建ipc连接

    使用SOAP(Simple Object Access Protocol)或者REST(Representational State Transfer)等协议,Java应用程序可以创建Web服务,实现跨平台、跨语言的进程间通信。 在实际应用中,选择合适的IPC方式取决于具体...

    java & j2ee 培训ppt

    10. **Web服务(Web Services)**:如SOAP(简单对象访问协议)和REST(Representational State Transfer)等,用于不同系统间的通信,实现服务的互操作性。 11. **Tomcat、Jetty等应用服务器**:这些服务器运行和...

    java调用webservice接口

    3. **调用Web Service方法**:使用客户端对象调用服务的方法,传递必要的参数。例如: ```java Service service = new Service(); MyWebServicePortType port = service.getPort(MyWebServicePortType.class); ...

    Java+J2EE开发知识

    Web服务允许不同系统间的互操作性,通过SOAP(Simple Object Access Protocol)协议传输XML数据。 了解和掌握上述技术,开发者可以构建高效、可扩展的企业级应用。无论是进行简单的网页开发,还是复杂的分布式系统...

Global site tag (gtag.js) - Google Analytics