Funny, I just stumbled upon it while estimating a project today :)
Note that Smooks can't be embedded in OFBiz due to a license issue: 
http://www.smooks.org/mediawiki/index.php?title=Licensing

Jacques

On Tuesday, December 03, 2013 9:24 PM Fairuz Wan Ismail 
<[email protected]> wrote:
> Hi,
> 
> I use Smooks to deal with conversion xml -> Java objects when consuming a
> webservice. Hope it helps.
> 
> Regards,
> Fairuz
> 
> -----Original Message-----
> From: jadelomeiri [mailto:[email protected]]
> Sent: Wednesday, December 04, 2013 12:24 AM
> To: [email protected]
> Subject: Re: calling external SOAP service from Ofbiz
> 
> Hello,
> 
> This is the solution I finally got. I hope it will be helpful for people
> having the same problem as I had.
> 
> 1) In my events java class I wrote the following code (which is an event
> calling the method that deals with SOAP):
> 
> *
> public static String callMySoap(HttpServletRequest
> request,HttpServletResponse response)
>  {
>    request.setAttribute("_EVENT_MESSAGE_", "You received this SOAP
> response:" + MySoapClient());
>    return "success";
>  }
> 
> 
> 
> public static SOAPMessage MySoapClient()
>    {
>        try {
>            // Create SOAP Connection
>            SOAPConnectionFactory soapConnectionFactory =
> SOAPConnectionFactory.newInstance();
>            SOAPConnection soapConnection =
> soapConnectionFactory.createConnection();
> 
>            // Send SOAP Message to SOAP Server
>            String url = "http://www.webservicex.net/geoipservice.asmx";;
>            SOAPMessage soapResponse =
> soapConnection.call(createSOAPRequest(), url);
> 
>            soapConnection.close();
>            return soapResponse;
>        } catch (Exception e) {
>            System.err.println("Error occurred while sending SOAP Request to
> Server");
>            e.printStackTrace();
>            return null;
>        }
> 
>    }
> 
>    private static SOAPMessage createSOAPRequest() throws Exception {
>        MessageFactory messageFactory = MessageFactory.newInstance();
>        SOAPMessage soapMessage = messageFactory.createMessage();
>        SOAPPart soapPart = soapMessage.getSOAPPart();
> 
>        String serverURI = "http://www.webservicex.net/";;
> 
>        // SOAP Envelope
>        SOAPEnvelope envelope = soapPart.getEnvelope();
>        envelope.addNamespaceDeclaration("web", serverURI);
> 
>        /*
>        Constructed SOAP Request Message:
>        <SOAP-ENV:Envelope
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
> xmlns:example="http://www.webservicex.net/";>
>            <SOAP-ENV:Header/>
>            <SOAP-ENV:Body>
>                <web:GetGeoIP>
>                    <web:IPAddressl>192.168.1.2</web:IPAddress>
>                </web:GetGeoIP>
>            </SOAP-ENV:Body>
>        </SOAP-ENV:Envelope>
>         */
> 
>        // SOAP Body
>        SOAPBody soapBody = envelope.getBody();
>        SOAPElement soapBodyElem = soapBody.addChildElement("GetGeoIP",
> "web");
>        SOAPElement soapBodyElem1 =
> soapBodyElem.addChildElement("IPAddress", "web");
>        soapBodyElem1.addTextNode("192.168.1.2");
> 
> 
>        MimeHeaders headers = soapMessage.getMimeHeaders();
>        headers.addHeader("SOAPAction", serverURI  + "GetGeoIP");
> 
>        soapMessage.saveChanges();
> 
>        /* Print the request message */
>        System.out.print("Request SOAP Message = ");
>        soapMessage.writeTo(System.out);
>        System.out.println();
> 
>        return soapMessage;
>    }
> *
> 
> 2) I added the following request-map to point to my event:
> 
> *
>      <request-map uri="callMySoap">
>      <event type="java" path="org.ofbiz.testapp.testapp.LearningEvents"
> invoke="callMySoap"/>
>      <response name="success" type="view" value="FeedbackMessages"/>
>    </request-map>
> *
> 
> 3) I added the following view-map:
> 
> *
> <view-map name="FeedbackMessages" type="screen"
> page="component://testapp/widget/TestAppScreens.xml#FeedbackMessages"/>
> *
> 
> which points to the following screen widget:
> *
>    <screen name="FeedbackMessages">
>      <section>
>        <widgets>
>          <decorator-screen name="main-decorator"
> location="${parameters.mainDecoratorLocation}">
>            <decorator-section name="title">
>              <label text="Exploring all placeholders for Feedback"/>
>            </decorator-section>
>            <decorator-section name="body">
> 
>            </decorator-section>
>          </decorator-screen>
>        </widgets>
>      </section>
>    </screen>
> *
> 
> 
> Note:
> step 3 is not necessary. I only used it to see something on my screen.
> 
> 
> Result:
> I can now see in real time the SOAP message that is being sent & the
> response that is received.
> and I can also this screen:
> <http://ofbiz.135035.n4.nabble.com/file/n4646047/result.png>
> 
> 
> Now:
> the only thing I still need to do is some parsing on the SOAP response
> message to be able to deal with the variables that interest me in that
> message. I also need to enhance my code to make it more "generic" so that it
> becomes somewhat dynamic and works with not only that specific Web Service
> that I had to hardcode.
> 
> Do you have any suggestions for that? I do not want to be reinventing the
> wheel!

Reply via email to