سؤال

هذه المشكلة قد يزعجني منذ أيام.نأمل شخص ما قد تأتي عبر هذا من قبل و قد وضعت الحل.

حتى لقد وضعت الوسيطة جافا التطبيق خلال تنفيذه استدعاء الصابون العمل.الآن سلوك هذا قليلا من التعليمات البرمجية تحت JDK 1.6 يعمل بشكل جيد:

        // 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.4 JDK مع الصابون المكتبات مرتبطة كل شيء أعلاه يعمل/يجمع/ينفذ ، باستثناء حقيقة أن SOAPAction مجال رأس فارغ.غريب بما يكفي عندما تحقق ما قيمة أن رأس (خطوط مباشرة بعد إعداد رأس) القيمة المناسبة المعروضة.ومع ذلك ، عندما يذهب أكثر من سلك الحقل فارغا.لأن هذا هو المجال الذي يشير إلى الموارد أريد أن المعالج رسائلي يتم الحصول على تشغيل مرة أخرى في الباب.

وقد أي شخص واجه هذه المشكلة من قبل ؟ إذا كان الأمر كذلك ، هل هناك الحلول الممكنة?(أنا بالطبع على استعداد لاستخدام مكتبة أخرى إذا لزم الأمر.)

تحديث:

المكتبات على classpath هي كما يلي:

  • Xerces (resolver.jar, serializer.jar, xercesImpl.jar, xml-apis.jar)
  • Saaj (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, على الرغم من أنني كنت مندهشا إذا كان أي من هذين دعم جافا 1.3.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top