这个问题一直困扰我的天。希望有人来过这之前,已经开发了一个解决办法。

所以我已经开发了一个中间Java应用程序,在其执行期间调用肥皂行动。现在,该行为的这些代码下的1.6JAVA工作:

        // inside a try-catch block
        SOAPConnectionFactory soapConnectionFactory = 
                     SOAPConnectionFactory.newInstance();
        SOAPConnection connection = 
                  soapConnectionFactory.createConnection();
        MessageFactory messageFactory = MessageFactory.newInstance();          
        SOAPMessage soapMsg = messageFactory.createMessage();
        String soapAction = getHeaderUrl() + "/" + method + "\r\n";
        MimeHeaders headers = soapMsg.getMimeHeaders(); 
        headers.addHeader("SOAPAction", soapAction); 

       // review the SOAPAction header
        int header_count = 
           soapMsg.getMimeHeaders().getHeader("SOAPAction").length;
        out("SOAPActions (from Soap header): ");
        if (header_count == 0) out ("No SOAPActions defined.");
        for (int i=0; i<header_count; i++)
            out("SOAPAction["+i+"] = \"" + 
               soapMsg.getMimeHeaders().getHeader("SOAPAction")[i] 
                  + "\""); 


        SOAPPart soapPart = soapMsg.getSOAPPart();            
        StreamSource s = new StreamSource(new StringReader(msg));
        soapPart.setContent(s);
        soapMsg.saveChanges();
        ByteArrayOutputStream req_bytes = new ByteArrayOutputStream();
        soapMsg.writeTo(req_bytes);
        String req = new String(req_bytes.toByteArray());         
        SOAPMessage reply = connection.call(soapMsg, Url);      

然而,当我使用这个完全相同的代码下的1.3或1.4JAVA与肥皂库相联系,上面的一切工作的/编制/执行, 除了对事实的领域的标题是空白的.很奇怪,当我检查什么的价值,标题是(该行以下立即设立的头)适当的价值是显示。然而,当它超过线,该领域是空的。因为这是该领域的指示的资源,我想到处理,我的消息得到回头的大门。

有人遇到这个问题吗?如果是这样,是有可能的解决方法?(我当然愿意使用另一个图书馆,如果需要的话。)

更新:

图书馆在我的类路径如下:

  • 了xerces(resolver.jar,serializer.jar,xercesImpl.jar,xml-apis.jar)
  • 接受(saaj.jar)
  • 轴线(axis.jar
  • 贾克斯-RPC(jaxrpc.jar)
  • 标准肥皂(activation.jar,mail.jar,soap.jar,xerces.jar)
  • 下议院的日志记录和发现的

在此先感谢!

有帮助吗?

解决方案 2

它看起来像这样的可能实际上是一个监督或一个错误,但是在任何我的速度解决办法是处理较低级别HTTP的东西动手动,即:

        URL u = new URL(Url);
        URLConnection uc = u.openConnection();
        HttpURLConnection  conn = (HttpURLConnection) uc;

        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("SOAPAction", getHeaderUrl() + "/" + method);
        conn.setRequestProperty("Content-type", "text/xml");

        OutputStream out = conn.getOutputStream();
        Writer wr = new OutputStreamWriter(out);

        wr.write(msg);
        wr.flush();
        wr.close();

        InputStream in = conn.getInputStream();
        String rsp="";
        int c;
        while ((c = in.read()) != -1) { 
            System.out.write(c);
            rsp = rsp.concat(String.valueOf((char)c));
        }
        in.close();
        rsp = deSOAP(rsp);
        response = response.fromXML(rsp);
        return response;

事实证明这是明显更加简明扼要比肥皂为基础的解决方案。

其他提示

奇特。你说你连接在肥皂图书馆-哪个,到底是什么?

我不会伤害尝试一种不同的堆肥皂,如CXF或贾克斯-WS-RI,虽然我会惊讶如果这两个支持java1.3.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top