blob: 25aca90d06d24e29f6bfa732de12acbb65c7d204 [file] [log] [blame]
/*******************************************************************************
* 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.apache.ofbiz.common;
import java.io.IOException;
import java.util.Locale;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.HttpClient;
import org.apache.ofbiz.base.util.HttpClientException;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilXml;
import org.apache.ofbiz.service.DispatchContext;
import org.apache.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>
*/
}
}