| /******************************************************************************* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| *******************************************************************************/ |
| package org.ofbiz.common; |
| |
| import java.io.IOException; |
| import java.util.Locale; |
| import java.util.Map; |
| |
| import javax.xml.parsers.ParserConfigurationException; |
| |
| import org.ofbiz.base.util.Debug; |
| import org.ofbiz.base.util.HttpClient; |
| import org.ofbiz.base.util.HttpClientException; |
| import org.ofbiz.base.util.UtilMisc; |
| import org.ofbiz.base.util.UtilProperties; |
| import org.ofbiz.base.util.UtilXml; |
| import org.ofbiz.service.DispatchContext; |
| import org.ofbiz.service.ServiceUtil; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| import org.xml.sax.SAXException; |
| |
| /** |
| * OFBIZ CDyne Services: for info see http://www.cdyne.com/developers/overview.aspx |
| */ |
| public class CdyneServices { |
| |
| public final static String module = CdyneServices.class.getName(); |
| public static final String resource = "CommonUiLabels"; |
| public final static String licenseKey = UtilProperties.getPropertyValue("cdyne", "LicenseKey", "0"); |
| |
| /** |
| * CDyne ReturnCityState Service |
| *@param dctx The DispatchContext that this service is operating in |
| *@param context Map containing the input parameters |
| *@return Map with the result of the service, the output parameters |
| */ |
| public static Map<String, Object> cdyneReturnCityState(DispatchContext dctx, Map<String, ?> context) { |
| String zipcode = (String) context.get("zipcode"); |
| Locale locale = (Locale) context.get("locale"); |
| String serviceUrl = "http://ws.cdyne.com/psaddress/addresslookup.asmx/ReturnCityState?zipcode=" + zipcode + "&LicenseKey=" + licenseKey; |
| try { |
| String httpResponse = HttpClient.getUrlContent(serviceUrl); |
| |
| Document addressDocument = UtilXml.readXmlDocument(httpResponse); |
| Element addressRootElement = addressDocument.getDocumentElement(); |
| |
| Map<String, Object> response = ServiceUtil.returnSuccess(); |
| populateCdyneAddress(addressRootElement, response); |
| |
| if ("true".equals(response.get("ServiceError"))) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonCDyneServiceError", UtilMisc.toMap("zipcode", zipcode), locale)); |
| } |
| if ("true".equals(response.get("AddressError"))) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonCDyneAddressError", UtilMisc.toMap("zipcode", zipcode), locale)); |
| } |
| |
| return response; |
| } catch (HttpClientException e) { |
| Debug.logError(e, "Error calling CDyne service at URL [" + serviceUrl + "]: " + e.toString(), module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonCDyneCallingError", UtilMisc.toMap("serviceUrl", serviceUrl, "errorString", e.toString()), locale)); |
| } catch (SAXException e) { |
| Debug.logError(e, "Error parsing XML result from CDyne service at URL [" + serviceUrl + "]: " + e.toString(), module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonCDyneParsingError", UtilMisc.toMap("serviceUrl", serviceUrl, "errorString", e.toString()), locale)); |
| } catch (ParserConfigurationException e) { |
| Debug.logError(e, "Error parsing XML result from CDyne service at URL [" + serviceUrl + "]: " + e.toString(), module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonCDyneParsingError", UtilMisc.toMap("serviceUrl", serviceUrl, "errorString", e.toString()), locale)); |
| } catch (IOException e) { |
| Debug.logError(e, "Error parsing XML result from CDyne service at URL [" + serviceUrl + "]: " + e.toString(), module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "CommonCDyneParsingError", UtilMisc.toMap("serviceUrl", serviceUrl, "errorString", e.toString()), locale)); |
| } |
| } |
| |
| public static void populateCdyneAddress(Element addressRootElement, Map<String, Object> targetContext) { |
| targetContext.put("ServiceError", UtilXml.childElementValue(addressRootElement, "ServiceError")); |
| targetContext.put("AddressError", UtilXml.childElementValue(addressRootElement, "AddressError")); |
| targetContext.put("AddressFoundBeMoreSpecific", UtilXml.childElementValue(addressRootElement, "AddressFoundBeMoreSpecific")); |
| targetContext.put("NeededCorrection", UtilXml.childElementValue(addressRootElement, "NeededCorrection")); |
| |
| targetContext.put("DeliveryAddress", UtilXml.childElementValue(addressRootElement, "DeliveryAddress")); |
| targetContext.put("City", UtilXml.childElementValue(addressRootElement, "City")); |
| targetContext.put("StateAbbrev", UtilXml.childElementValue(addressRootElement, "StateAbbrev")); |
| targetContext.put("ZipCode", UtilXml.childElementValue(addressRootElement, "ZipCode")); |
| targetContext.put("County", UtilXml.childElementValue(addressRootElement, "County")); |
| targetContext.put("CountyNum", UtilXml.childElementValue(addressRootElement, "CountyNum")); |
| targetContext.put("PreferredCityName", UtilXml.childElementValue(addressRootElement, "PreferredCityName")); |
| |
| targetContext.put("DeliveryPoint", UtilXml.childElementValue(addressRootElement, "DeliveryPoint")); |
| targetContext.put("CheckDigit", UtilXml.childElementValue(addressRootElement, "CheckDigit")); |
| |
| targetContext.put("CSKey", UtilXml.childElementValue(addressRootElement, "CSKey")); |
| targetContext.put("FIPS", UtilXml.childElementValue(addressRootElement, "FIPS")); |
| |
| targetContext.put("FromLongitude", UtilXml.childElementValue(addressRootElement, "FromLongitude")); |
| targetContext.put("FromLatitude", UtilXml.childElementValue(addressRootElement, "FromLatitude")); |
| targetContext.put("ToLongitude", UtilXml.childElementValue(addressRootElement, "ToLongitude")); |
| targetContext.put("ToLatitude", UtilXml.childElementValue(addressRootElement, "ToLatitude")); |
| targetContext.put("AvgLongitude", UtilXml.childElementValue(addressRootElement, "AvgLongitude")); |
| targetContext.put("AvgLatitude", UtilXml.childElementValue(addressRootElement, "AvgLatitude")); |
| |
| targetContext.put("CMSA", UtilXml.childElementValue(addressRootElement, "CMSA")); |
| targetContext.put("PMSA", UtilXml.childElementValue(addressRootElement, "PMSA")); |
| targetContext.put("MSA", UtilXml.childElementValue(addressRootElement, "MSA")); |
| targetContext.put("MA", UtilXml.childElementValue(addressRootElement, "MA")); |
| |
| targetContext.put("TimeZone", UtilXml.childElementValue(addressRootElement, "TimeZone")); |
| targetContext.put("hasDaylightSavings", UtilXml.childElementValue(addressRootElement, "hasDaylightSavings")); |
| targetContext.put("AreaCode", UtilXml.childElementValue(addressRootElement, "AreaCode")); |
| targetContext.put("LLCertainty", UtilXml.childElementValue(addressRootElement, "LLCertainty")); |
| |
| targetContext.put("CensusBlockNum", UtilXml.childElementValue(addressRootElement, "CensusBlockNum")); |
| targetContext.put("CensusTractNum", UtilXml.childElementValue(addressRootElement, "CensusTractNum")); |
| |
| /* |
| Example URL: http://ws.cdyne.com/psaddress/addresslookup.asmx/ReturnCityState?zipcode=93940&LicenseKey=0 |
| NOTE: 0 is a test LicenseKey |
| |
| Example Response: |
| <?xml version="1.0" encoding="utf-8"?> |
| <Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://ws.cdyne.com/"> |
| <ServiceError>false</ServiceError> |
| <AddressError>false</AddressError> |
| <AddressFoundBeMoreSpecific>false</AddressFoundBeMoreSpecific> |
| <NeededCorrection>true</NeededCorrection> |
| |
| <DeliveryAddress>**UNKNOWN**</DeliveryAddress> |
| <City>DEL REY OAKS</City> |
| <StateAbbrev>CA</StateAbbrev> |
| <ZipCode>93940</ZipCode> |
| <County>MONTEREY</County> |
| <CountyNum>0</CountyNum> |
| <PreferredCityName>MONTEREY</PreferredCityName> |
| |
| <DeliveryPoint>99</DeliveryPoint> |
| <CheckDigit>0</CheckDigit> |
| |
| <CSKey>Z20854</CSKey> |
| <FIPS>06053</FIPS> |
| |
| <FromLongitude>-121.919965</FromLongitude> |
| <FromLatitude>36.362864</FromLatitude> |
| <ToLongitude>-121.647022</ToLongitude> |
| <ToLatitude>36.652645</ToLatitude> |
| <AvgLongitude>-121.7834935</AvgLongitude> |
| <AvgLatitude>36.5077545</AvgLatitude> |
| |
| <CMSA>7120</CMSA> |
| <PMSA /> |
| <MSA>7120</MSA> |
| <MA>712</MA> |
| |
| <TimeZone>PST</TimeZone> |
| <hasDaylightSavings>true</hasDaylightSavings> |
| <AreaCode>831</AreaCode> |
| <LLCertainty>90</LLCertainty> |
| |
| <CensusBlockNum>9003</CensusBlockNum> |
| <CensusTractNum>0134.00</CensusTractNum> |
| </Address> |
| */ |
| } |
| } |