Frage

Dieses Problem für Tage stört mich ist. Hoffentlich hat jemand über diese kommen vor und hat eine Abhilfe entwickelt.

Also habe ich eine Middleware-Java-Anwendung entwickelt haben, die während ihrer Ausführung eine SOAP-Aktion aufruft. Nun wird das Verhalten dieses Stück Code unter dem JDK 1.6 gut funktioniert:

        // 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);      

Allerdings, wenn ich genau diesen gleichen Code unter 1.3 oder 1.4 JDK mit den SOAP-Bibliotheken gelinkt verwenden, alles über Werken / kompiliert / ausgeführt wird, mit Ausnahme der Tatsache, dass das SOAP-Aktions-Feld des Headers leer ist . Seltsam genug, wenn ich überprüfen, was der Wert dieses Header (die Zeilen unmittelbar nach dem Header-Einrichtung) der entsprechende Wert wird angezeigt. Allerdings, wenn es über den Draht geht, ist das Feld leer. Da dies das Feld ist, das die Ressource angibt ich an den Prozessor wollen, meine Nachrichten werden immer an der Tür drehte sich um.

Hat jemand vor diesem Problem begegnet? Wenn ja, gibt es mögliche Abhilfen? (Ich bin, natürlich bereit, eine andere Bibliothek zu verwenden, wenn erforderlich.)

UPDATE:

Die Bibliotheken auf meinem Classpath sind wie folgt:

  • Xerces (resolver.jar, serializer.jar, xercesImpl.jar, xml-apis.jar)
  • Saaj (saaj.jar)
  • Achse (axis.jar
  • JAX-RPC (jaxrpc.jar)
  • Standard SOAP (activation.jar, mail.jar, soap.jar, xerces.jar)
  • Commons-Protokollierung und Entdeckung

Vielen Dank im Voraus!

War es hilfreich?

Lösung 2

Es sieht wie folgt aus eigentlich ein Versehen oder einen Fehler sein kann, aber auf jeden Fall war mein Problem zu umgehen, die auf niedrigerer Ebene HTTP Sachen manuell, das heißt zu handhaben.

        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;

Es stellte sich heraus diese deutlich prägnanter als die SOAP-basierte Lösung als auch.

Andere Tipps

Peculiar. Sie sagen, Sie in den SOAP-Bibliotheken sind verknüpft - welche, in genau

würde ich nicht einen anderen SOAP-Stack, wie CXF oder JAX-WS-RI versuchen verletzt, obwohl ich überrascht würde, wenn eine dieser beiden 1.3 unterstützt Java.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top