Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.StringWriter;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.ProtocolException;
- import java.net.URL;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.Result;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerConfigurationException;
- import javax.xml.transform.TransformerException;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.xml.sax.SAXException;
- /**
- * Servlet implementation class ProxyServlet
- */
- @WebServlet("/ProxyServlet")
- public class ProxyServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
- */
- public ProxyServlet() {
- super();
- }
- /**
- * @see HttpServlet#Copy(InputStream in, OutputStream out)
- */
- public void copy(InputStream in, OutputStream out) throws IOException {
- synchronized (in) {
- synchronized (out) {
- byte[] buffer = new byte[256];
- while (true) {
- int bytesRead = in.read(buffer);
- if (bytesRead == -1) break;
- out.write(buffer, 0, bytesRead);
- }
- }
- }
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- // UNUSED
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- /*** INOLTRO CLIENT -> SERVER ***/
- // Creo lo stream della richiesta, contenente la stringa XML da passare al parser
- InputStream streamReq = req.getInputStream();
- // Controllo la correttezza del contenuto verificando la corrispondenza dei content-type
- String type = req.getHeader("Content-type");
- if(type.equals("text/xml")){
- res.sendError(400);
- return;
- }
- // Creo e inizializzo le factory per creare docs
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- dbFactory.setNamespaceAware(true);
- DocumentBuilder documentBuilder;
- try {
- documentBuilder = dbFactory.newDocumentBuilder();
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- res.sendError(501);
- return;
- }
- // Creo il documento dove inserisco direttamente il parsing della richiesta
- Document parsedReq = null;
- try {
- parsedReq = documentBuilder.parse(streamReq);
- } catch (SAXException e1) {
- e1.printStackTrace();
- res.sendError(501);
- return;
- } catch (IOException e1) {
- e1.printStackTrace();
- res.sendError(501);
- return;
- }
- // Estraggo la root contenente il tipo di richiesta
- Element root = parsedReq.getDocumentElement();
- String strReq = root.getNodeName();
- // Costruisco la URL con la richiesta estratta dalla root del doc
- String url = "http://svcs.ebay.com/services/search/FindingService/v1?SECURITY-APPNAME=INSERISCI_LA_TUA_APPID&OPERATION-NAME=" + strReq;
- URL ebayFindingService;
- try {
- ebayFindingService = new URL(url);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- res.sendError(400);
- return;
- }
- // Creo e configuro il transformer per impacchettare correttamente un doc in una stringa XML
- TransformerFactory transFactory =TransformerFactory.newInstance();
- Transformer transformer;
- try {
- transformer = transFactory.newTransformer();
- } catch (TransformerConfigurationException e) {
- e.printStackTrace();
- res.sendError(501);
- return;
- }
- // Partendo dal doc creo la sorgente da cui attingerà il transformer
- DOMSource source = new DOMSource(parsedReq);
- // Creo un nuovo output stream che raccoglie i dati trasformati e li impacchetta in stringa XML
- StringWriter sWriter = new StringWriter();
- Result result = new StreamResult(sWriter);
- // Effettuo la trasformazione vera e propria
- try {
- transformer.transform(source, result);
- } catch (TransformerException e) {
- e.printStackTrace();
- res.sendError(501);
- return;
- }
- String trStr = sWriter.toString();
- // Creo una nuova connessione tramite HTTP
- HttpURLConnection con = null;
- try {
- con = (HttpURLConnection) ebayFindingService.openConnection();
- } catch (IOException e) {
- res.sendError(501);
- e.printStackTrace();
- return;
- }
- // Imposto la connessione specificando POST come metodo di richiesta
- try {
- con.setRequestMethod("POST");
- } catch (ProtocolException e) {
- res.sendError(501);
- e.printStackTrace();
- return;
- }
- // Abilito la connessione a scrivere dati in output ed a riceverne in input
- con.setDoOutput(true);
- con.setDoInput(true);
- // Imposto il nuovo header per la connessione verso i servizi
- con.setRequestProperty("Content-Type","text/xml");
- // Creo un nuovo streamOutput in cui scrivo la richiesta da inviare, poi lo resetto e lo chiudo
- DataOutputStream wr=null;
- try {
- wr = new DataOutputStream(con.getOutputStream());
- } catch (IOException e) {
- e.printStackTrace();
- res.sendError(501);
- return;
- }
- try {
- wr.writeBytes(trStr);
- } catch (IOException e) {
- e.printStackTrace();
- res.sendError(501);
- return;
- }
- try {
- wr.flush();
- wr.close();
- } catch (IOException e) {
- e.printStackTrace();
- res.sendError(501);
- return;
- }
- System.out.println(trStr);
- /*** INOLTRO SERVER -> CLIENT ***/
- // Ricavo l'esito della connessione dal server
- int esitoHTTP = con.getResponseCode();
- // Ricavo il content Type della risposta
- String contentTypeRisposta = con.getContentType();
- // Creo uno inputStream dove inserisco la risposta del server
- InputStream streamRisposta = null;
- if(esitoHTTP<300)
- streamRisposta = con.getInputStream();
- else
- streamRisposta = con.getErrorStream();
- // Inoltro tutte le informazioni al client
- res.setStatus(esitoHTTP);
- res.setContentType(contentTypeRisposta);
- copy(streamRisposta, res.getOutputStream());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement