| Report Incident Example |
| ======================= |
| |
| An example based on real life use case for reporting incidents using webservice |
| that are transformed and send as emails to a backing system. WS-security has been |
| implemented. So, the user must generates a SOAP envelope containing a SOAP header |
| with wsse xml tag. A simple property map has been created containing user and password. |
| We use Apache CXF WSS4JInterceptor to get the user/password and timestamp and authenticate |
| the user using the WSS4J callback |
| |
| You will need to compile this example first: |
| mvn install |
| |
| Remarks: |
| - During the compilation phase, a unit test will be performed, this unit test simulates the |
| communication between a client calling the web services exposed by our camel/cxf routes. During the call, |
| the user "charles" is used to authenticate the web service call and the SOAP message created can be |
| retrieved from log file target/camel-example-reportincident-wssecurity.log |
| - A mock SMTP server is used during unit test |
| - In Eclipse, I have used the following option when starting the junit test case. This option tells |
| CXF that it must use log4j : -Dorg.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger |
| |
| To run the example on Apache ServiceMix 4.x or Apache Karaf 2.x |
| |
| 1) launch the server |
| karaf.bat |
| |
| For Karaf: edit the file jre.properties to add the following packages to be exported |
| jre-1.6=, \ |
| com.sun.org.apache.xerces.internal.dom, \ |
| com.sun.org.apache.xerces.internal.jaxp, \ |
| |
| They are required by the following bundle : org.apache.servicemix.bundles/org.apache.servicemix.bundles.saaj-impl/1.3.2_1 |
| |
| 2) Add features required |
| features:addUrl mvn:org.apache.camel.karaf/apache-camel/${version}/xml/features |
| features:install http |
| features:install camel |
| features:install camel-cxf |
| features:install camel-mail |
| features:install camel-velocity |
| |
| remark: As the camel route sends email to a SMTP server, you must configure a user/password in your favorite |
| SMTP Server (James by example). User = someone and password = secret |
| |
| 3) Deploy our example |
| osgi:install -s mvn:org.apache.camel/camel-example-reportincident-wssecurity |
| |
| 4) Verify that your service is available using in the browser the following url |
| http://localhost:9081/camel-example-reportincident/webservices/incident?wsdl |
| |
| 5) Start SOAPUI (2.x) |
| Create a new project called camel-example-reportincident-wssecurity |
| Point to the following url : http://localhost:9081/camel-example-reportincident/webservices/incident?wsdl |
| Open the request 1 (under camel-example-reportincident-wssecurity --> ReportIncidentBinding --> ReportIncident) and copy/paste the SOAP |
| message generated by the unit test |
| |
| ex : |
| |
| 2010-07-14 09:57:54,403 [main ] INFO LoggingOutInterceptor - Outbound Message |
| --------------------------- |
| ID: 1 |
| Address: http://localhost:9081/camel-example-reportincident/webservices/incident |
| Encoding: UTF-8 |
| Content-Type: text/xml |
| Headers: {SOAPAction=["http://reportincident.example.camel.apache.org/ReportIncident"], Accept=[*/*]} |
| Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soap:mustUnderstand="1"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-2"><wsu:Created>2010-07-14T07:57:54.387Z</wsu:Created><wsu:Expires>2010-07-14T08:02:54.387Z</wsu:Expires></wsu:Timestamp><wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-1"><wsse:Username>charles</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">0U5uXRYukYG5PF82gsmncH+yWEE=</wsse:Password><wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">/Ka8O+F8cyufohiJFp8wjA==</wsse:Nonce><wsu:Created>2010-07-14T07:57:54.387Z</wsu:Created></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><ns2:inputReportIncident xmlns:ns2="http://reportincident.example.camel.apache.org"><incidentId>123</incidentId><incidentDate>2008-08-18</incidentDate><givenName>Claus</givenName><familyName>Ibsen</familyName><summary>Bla</summary><details>Bla bla</details><email>davsclaus@apache.org</email><phone>0045 2962 7576</phone></ns2:inputReportIncident></soap:Body></soap:Envelope> |
| -------------------------------------- |
| 2010-07-14 09:57:54,403 [main ] DEBUG HTTPConduit - Sending POST Message with Headers to http://localhost:9080/camel-example-reportincident/webservices/incident Conduit :{http://reportincident.example.camel.apache.org}ReportIncidentEndpointPort.http-conduit |
| |
| --> and the message formatted that you copy in SOAPUI |
| |
| <?xml version="1.0" encoding="UTF-8"?> |
| <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> |
| <soap:Header> |
| <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soap:mustUnderstand="1"> |
| <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-2"> |
| <wsu:Created>2010-07-14T09:40:29.637Z</wsu:Created> |
| <wsu:Expires>2010-07-14T09:45:29.637Z</wsu:Expires> |
| </wsu:Timestamp> |
| <wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-1"> |
| <wsse:Username>charles</wsse:Username> |
| <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">TVzWGxNvhlixNVWol8poD9DHxl8=</wsse:Password> |
| <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">WsMNSm/C4dzdPS3OhUi94Q==</wsse:Nonce> |
| <wsu:Created>2010-07-14T09:40:29.637Z</wsu:Created> |
| </wsse:UsernameToken> |
| </wsse:Security> |
| </soap:Header> |
| <soap:Body> |
| <ns2:inputReportIncident xmlns:ns2="http://reportincident.example.camel.apache.org"> |
| <incidentId>111</incidentId> |
| <incidentDate>2010-07-14</incidentDate> |
| <givenName>Charles</givenName> |
| <familyName>Moulliard</familyName> |
| <summary>Bla</summary> |
| <details>Bla bla</details> |
| <email>cmoulliard@apache.org</email> |
| <phone>0011 22 33 44</phone> |
| </ns2:inputReportIncident> |
| </soap:Body> |
| </soap:Envelope> |
| |
| |
| You can use another user: james, claus and retry. |
| |
| 6) Check email |
| Check through a POP request that a message has been published in the mailbox of someone (email address : incident@mycompany.com) |
| |
| This example is documented at |
| http://camel.apache.org/tutorial-osgi-camel-part1.html |
| |
| If you hit any problems please let us know on the Camel Forums |
| http://camel.apache.org/discussion-forums.html |
| |
| Please help us make Apache Camel better - we appreciate any feedback you may |
| have. Enjoy! |
| |
| ------------------------ |
| The Camel riders! |