Hi Abhishek

On 09/06/12 07:40, Abhishek Sharma wrote:
I Appreciate your efforts in getting it done and sharing the same :)

One Q related to MappedNamespaceConvention provider:

I used Jackson provider explicitly as I was getting some problem with the 
default json provider in CXF as it was creating an unnecessary wrapper for the 
root element.

So when you publish your schema the json may or may not contain additional 
wrapper.

Which one is syntactically correct as different parsers have different 
behaviors?

For e.g.:
Sample XML:

<MMTHotelAvailRequest>
<POS>
<Requestor type="B2BAgent" idContext="FPH" id="AFF0987" channel="B2C"/>
<Source iSOCurrency="INR"/>
</POS>
</MMTHotelAvailRequest>

JSON1 (thru CXF):
{
   "MMTHotelAvailRequest": {
     "POS": {
       "Requestor": {
         "type": "B2BAgent",
         "idContext": "FPH",
         "id": "AFF0987",
         "channel": "B2C"
       },
       "Source": { "iSOCurrency": "INR" }
     }
   }
}

JSON2 (thru Jackson):
{
   "POS" : {
     "Requestor" : {
       "channel" : "Mobile",
       "id" : "AFF0987",
       "idContext" : "MMT",
       "type" : "MobileAgent"
     },
     "Source" : {"iSOCurrency" : "INR"
     }
   }
}
Jettison is JAXB-driven so it may not be able to produce optimal JSON sequences; despite that, one advantage of being JAXB-driven is that it is quite configurable. Modifying, validating and restricting JSON sequences are easy with Jettison. One option is to configure it to drop
the "POS" element, see
http://cxf.apache.org/docs/transformationfeature.html#TransformationFeature-Droppingoutputandinputelements

Use an outDropElements property

HTH, Sergey



Thanks,
Abhishek

-----Original Message-----
From: amathewcxf [mailto:[email protected]]
Sent: Saturday, June 09, 2012 12:02 AM
To: [email protected]
Subject: RE: How to use XSD file with cxf

Thank you Abhishek for all the help. I have it all working with WebClient&
JSON as the type.

Below is my final client code (I am posting so it may help others in the
forum):

                try {
                        WebClient webClient =
WebClient.create("https://myremotws.com:18443/availability/v1?eventId=1146";,
Collections.singletonList(new MappedNamespaceConvention(new
Configuration())));
                        String authorizationHeader = "Basic " +
org.apache.cxf.common.util.Base64Utility.encode("myusername:mypassword".getBytes());
                        webClient.header("Authorization", authorizationHeader);
                        webClient.accept(MediaType.APPLICATION_JSON);

                        // This section of code will make sure client is 
treated as a Trusted
source by remote service
                        // and this is needed only if the remote server doesnt 
have a valid
certificate
                        HTTPConduit conduit = 
WebClient.getConfig(webClient).getHttpConduit();
                        
conduit.setTlsClientParameters(getConfiguredClientSSLParms(webClient));
                        
                        // This will make the exact remote webservice all to 
get the response
                        // The response data will be JSON String and the above 
provider
(MappedNamespaceConvention) which
                        // we registered will take care of all JSON parsing to 
our JAXB classes.
                        Availability avail = webClient.get(Availability.class);

                } catch (Throwable e) {
                        
                }

Thanks
Anil Mathew

--
View this message in context: 
http://cxf.547215.n5.nabble.com/How-to-use-XSD-file-with-cxf-tp5708311p5709415.html
Sent from the cxf-user mailing list archive at Nabble.com.


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to