Hi there, I'm preparing a simple HTTP bridge like:
user -> HTTP-consumer -> NMR -> HTTP-provider -> Google Translate I am using a marshaler in the consumer which works perfectly (packing user's request into XML) but I have a problem with Marshaler at the provider's side. provider su xbean.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:http="http://servicemix.apache.org/http/1.0" xmlns:tr="http://traduce.pl" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://servicemix.apache.org/http/1.0 http://servicemix.apache.org/schema/servicemix-http-3.2.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <http:provider service="tr:googletranslate" endpoint="json" marshaler="#marshaler" /> <bean id="marshaler" class="pl.traduce.su.googletranslate.HttpTranslationMarshaler" /> </beans> The Marshaler class is the following: public class HttpTranslationMarshaler extends DefaultHttpProviderMarshaler { /* (non-Javadoc) * @see org.apache.servicemix.http.endpoints.DefaultHttpProviderMarshaler#createRequest(javax.jbi.messaging.MessageExchange, javax.jbi.messaging.NormalizedMessage, org.apache.servicemix.http.jetty.SmxHttpExchange) */ @Override public void createRequest(MessageExchange me, NormalizedMessage nm, SmxHttpExchange she) throws Exception { //super.createRequest(me, nm, she); String text = ((StringSource)nm.getContent()).getText().substring(6, ((StringSource)nm.getContent()).getText().length() - 6);//TODO: replace with SAX she.setMethod(HttpMethods.GET); she.setURI("/translate_a/t?client=traduce.pl&text=" + text + "&sl=en&tl=fr"); she.setAddress(new InetSocketAddress("translate.google.com", 80)); she.addRequestHeader(HttpHeaders.HOST_BUFFER, new ByteArrayBuffer("translate.google.com")); //she.setURL("http://translate.google.com:80/translate_a/t?client=traduce.pl&text=" + text + "&sl=en&tl=fr"); System.err.println("requesting Google!"); } /* (non-Javadoc) * @see org.apache.servicemix.http.endpoints.HttpProviderMarshaler#handleResponse(javax.jbi.messaging.MessageExchange, org.apache.servicemix.http.jetty.SmxHttpExchange) */ @Override public void handleResponse(MessageExchange me, SmxHttpExchange she) throws Exception { System.err.println("received answer!"); System.err.println(she.getResponseContent()); NormalizedMessage nm = me.createMessage(); nm.setContent(new StringSource("got JSON!")); me.setMessage(nm, "out"); //or in?? } } All i get is: requesting Google! java.net.UnknownHostException: Remote socket address cannot be null. at org.mortbay.jetty.client.HttpClient.getDestination(HttpClient.java:160) at org.mortbay.jetty.client.HttpClient.send(HttpClient.java:134) at org.apache.servicemix.http.endpoints.HttpProviderEndpoint.process(HttpProviderEndpoint.java:112) at org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538) at org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490) at org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46) at org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620) at org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172) at org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167) at org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) despite the fact that I DO SET the location... Morover, such a standalone test works well: ready = false; HttpExchange she = new ContentExchange() { @Override protected void onResponseComplete() throws IOException { int status = getResponseStatus(); if (status == 200) { System.out.println(getResponseContent()); } else System.err.println("ERROR" + status); ready = true; } }; String text = "Ala%20ma%20kota"; she.setMethod(HttpMethods.GET); she.setURI("/translate_a/t?client=traduce.pl&text=" + text + "&sl=en&tl=fr"); she.setAddress(new InetSocketAddress("translate.google.com", 80)); she.addRequestHeader(HttpHeaders.HOST_BUFFER, new ByteArrayBuffer("translate.google.com")); System.err.println("requesting Google!"); HttpClient client = new HttpClient(); client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); client.setMaxConnectionsPerAddress(2); // max 200 concurrent connections to every address client.setThreadPool(new QueuedThreadPool(2)); // max 2 threads client.setTimeout(30000); // 30 seconds timeout; if no server reply, the request expires client.start(); client.send(she); while (!ready) {} Do you have any ideas how to fix my Marshaler? -- View this message in context: http://old.nabble.com/HTTP-Provider-with-custom-Marshaller-problem-tp28123182p28123182.html Sent from the ServiceMix - User mailing list archive at Nabble.com.
