blob: b5a99c4e671c37993a2eed85df2338f0e9c0f2ab [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.ofbiz.shipment.thirdparty.usps;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.TransformerException;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* USPS Webtools API Mock API Servlet
*/
@SuppressWarnings("serial")
public class UspsMockApiServlet extends HttpServlet {
public static final String module = UspsMockApiServlet.class.getName();
public UspsMockApiServlet() {
super();
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// we're only testing the Rate API right now
if (!"Rate".equals(request.getParameter("API"))) {
Debug.logError("Unsupported API [" + request.getParameter("API") + "]", module);
return;
}
String xmlValue = request.getParameter("XML");
Document requestDocument = null;
try {
requestDocument = UtilXml.readXmlDocument(xmlValue, false);
} catch (Exception e) {
Debug.logError(e, module);
return;
}
if (requestDocument == null) {
Debug.logError("In UspsMockApiSerlvet No XML document found in request, quiting now; XML parameter is: " + xmlValue, module);
return;
}
List<? extends Element> packageElementList = UtilXml.childElementList(requestDocument.getDocumentElement(), "Package");
if (UtilValidate.isNotEmpty(packageElementList)) {
Document responseDocument = UtilXml.makeEmptyXmlDocument("RateResponse");
for (Element packageElement: packageElementList) {
Element responsePackageElement =
UtilXml.addChildElement(responseDocument.getDocumentElement(), "Package", responseDocument);
responsePackageElement.setAttribute("ID", packageElement.getAttribute("ID"));
UtilXml.addChildElementValue(responsePackageElement, "ZipOrigination",
UtilXml.childElementValue(packageElement, "ZipOrigination"), responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "ZipDestination",
UtilXml.childElementValue(packageElement, "ZipDestination"), responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "Pounds",
UtilXml.childElementValue(packageElement, "Pounds"), responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "Ounces",
UtilXml.childElementValue(packageElement, "Ounces"), responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "Container",
UtilXml.childElementValue(packageElement, "Container"), responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "Size",
UtilXml.childElementValue(packageElement, "Size"), responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "Zone", "1", responseDocument);
UtilXml.addChildElementValue(responsePackageElement, "Postage", "3.00", responseDocument);
}
OutputStream os = new ByteArrayOutputStream();
try {
UtilXml.writeXmlDocument(responseDocument, os, "UTF-8", true, false, 0);
} catch (TransformerException e) {
Debug.logInfo(e, module);
return;
}
response.setContentType("text/xml");
ServletOutputStream sos = response.getOutputStream();
sos.print(os.toString());
sos.flush();
}
}
@Override
public void destroy() {
super.destroy();
}
}