Interesting comparison for custom projects 
http://www.smooks.org/mediawiki/index.php?title=Performance

Jacques

On Wednesday, December 04, 2013 12:21 AM Adrian Crum 
<[email protected]> wrote:
> OFBiz uses XStream for object serialization.
> 
> Adrian Crum
> Sandglass Software
> www.sandglass-software.com
> 
> On 12/3/2013 3:49 PM, Jacques Le Roux wrote:
>> 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