Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/Examples/MOXy/JSON Geocode"
Line 125: | Line 125: | ||
'''Address''' | '''Address''' | ||
− | <div style="width: | + | <div style="width:950px"> |
<source lang="java"> | <source lang="java"> | ||
package org.example.geocode.json; | package org.example.geocode.json; |
Revision as of 12:51, 18 June 2012
JSON Binding: Google Geocode Example
This example will demonstrate mapping a single object model to both XML and JSON using the same set of metadata. Google Maps Geocoding API V2 will be used to provide the XML and JSON inputs for this example.
XML Input
Below is the link we will use to get the data as XML. This is specified in the output parameter. Note the output=xml in the URL:
XML Result
Below is an example of the XML returned from Google Maps:
<?xml version="1.0" encoding="UTF-8" ?> <kml xmlns="http://earth.google.com/kml/2.0"> <Response> <name>1600 Amphitheatre Parkway, Mountain View, CA</name> <Status> <code>200</code> <request>geocode</request> </Status> <Placemark id="p1"> <address>1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA </address> <AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> <Country> <CountryNameCode>US</CountryNameCode> <CountryName>USA</CountryName> <AdministrativeArea> <AdministrativeAreaName>CA</AdministrativeAreaName> <Locality> <LocalityName>Mountain View</LocalityName> <Thoroughfare> <ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName> </Thoroughfare> <PostalCode> <PostalCodeNumber>94043</PostalCodeNumber> </PostalCode> </Locality> </AdministrativeArea> </Country> </AddressDetails> <ExtendedData> <LatLonBox north="37.4227454" south="37.4200474" east="-122.0843863" west="-122.0870843" /> </ExtendedData> <Point> <coordinates>-122.0857353,37.4213964,0</coordinates> </Point> </Placemark> </Response> </kml>
JSON Input
Below is the link we will use to get the data as JSON. This is specified in the output parameter. Note the output=json in the URL:
JSON Result
Below is an example of the XML returned from Google Maps: { "name": "1600 Amphitheatre Parkway, Mountain View, CA", "Status": { "code": 200, "request": "geocode" }, "Placemark": [ { "id": "p1", "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", "AddressDetails": { "Accuracy" : 8, "Country" : { "AdministrativeArea" : { "AdministrativeAreaName" : "CA", "Locality" : { "LocalityName" : "Mountain View", "PostalCode" : { "PostalCodeNumber" : "94043" }, "Thoroughfare" : { "ThoroughfareName" : "1600 Amphitheatre Pkwy" } } }, "CountryName" : "USA", "CountryNameCode" : "US" } }, "ExtendedData": { "LatLonBox": { "north": 37.4227454, "south": 37.4200474, "east": -122.0843863, "west": -122.0870843 } }, "Point": { "coordinates": [ -122.0857353, 37.4213964, 0 ] } } ] }
Domain Model
The following domain model will be used for this example. Note that the exact same class with the exact same metadata will be used for both the XML and JSON bindings.
Address
package org.example.geocode.json; import javax.xml.bind.annotation.XmlType; import org.eclipse.persistence.oxm.annotations.XmlPath; @XmlType(propOrder={"country", "state", "city", "street", "postalCode"}) public class Address { @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()") private String street; @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:Locality/ns:LocalityName/text()") private String city; @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()") private String state; @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()") private String country; @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()") private String postalCode; }