You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by laolong <le...@sina.com> on 2009/06/11 08:58:26 UTC

HTTP Post method issue when use http:consumer (Jetty issue?)

Hi,

   There is a http component to receive HTTP Post data and forward the data
to another application,  request.getParameter("testparam") is empty when try
to get the POST data from HttpServletRequest(in HTTPMarshaler class), I used
HTML form and Java HTTP client to test but both failed. I'm sure the method
is POST. 
   It works when change to GET method. 
   is it a bug of http component or Jetty? or something I need to config? 

   Please advise.


<http:provider service="tns:ProviderService"
               endpoint="ep"
               locationURI="http://localhost:8000/test/price" >
    </http:provider>  

<http:consumer service="tns:ConsumerService"
               endpoint="jbi"
               defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
               locationURI="http://0.0.0.0:8199/price"
               targetService="tns:ProviderService"
               marshaler="#marshaler" />
	<bean id="marshaler" class="demo.HTTPMarshaler" />


public class HTTPMarshaler extends DefaultHttpConsumerMarshaler {

	private SourceTransformer sourceTransformer = new SourceTransformer();

	public MessageExchange createExchange(HttpServletRequest request,
			ComponentContext context) throws Exception {

		System.out.println("parm:"+getParameterList(request));

		MessageExchange me = context.getDeliveryChannel()
				.createExchangeFactory().createExchange(getDefaultMep());
		NormalizedMessage in = me.createMessage();
		try{
			in.setContent(new StringSource(request.getParameter("testparam")));
		}catch(Exception e){
			e.printStackTrace();
			in.setContent(new StringSource(getInputString(request)));
		}
		me.setMessage(in, "in");
		System.out.println("end createExchange");
		return me;
	}
	public static String getParameterList(HttpServletRequest request){
	     String parmStr="<?xml version=\"1.0\"?><ParameterList>\n";
	     java.util.Enumeration en=request.getParameterNames();
	     int i=0;
	     while (en.hasMoreElements()){
	       parmStr+="<Parameter index=\""+(++i)+"\">";
	       String name=en.nextElement().toString();
	       parmStr+="<Name>"+name+"</Name>";
	        parmStr += "<Value><!-- " +
	            request.getParameter(name) +
	            "--></Value>";
	       parmStr+="</Parameter>"+"\n";
	     }
	     en=request.getAttributeNames();	     
	     while (en.hasMoreElements()){
	       parmStr+="<Attribute index=\""+(++i)+"\">";
	       String name=en.nextElement().toString();
	       parmStr+="<Name>"+name+"</Name>";
	        parmStr += "<Value><!-- " +
	            request.getAttribute(name) +
	            "--></Value>";
	       parmStr+="</Attribute>"+"\n";
	     }
	     en=request.getHeaderNames();	     
	     while (en.hasMoreElements()){
	       parmStr+="<Header index=\""+(++i)+"\">";
	       String name=en.nextElement().toString();
	       parmStr+="<Name>"+name+"</Name>";
	        parmStr += "<Value><!-- " +
	            request.getHeader(name) +
	            "--></Value>";
	       parmStr+="</Header>"+"\n";
	     }
	       parmStr+="</ParameterList>"+"\n";
	     return parmStr;
	    }
-- 
View this message in context: http://www.nabble.com/HTTP-Post-method-issue-when-use-http%3Aconsumer-%28Jetty-issue-%29-tp23976283p23976283.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: HTTP Post method issue when use http:consumer (Jetty issue?)

Posted by laolong <le...@sina.com>.
 This problem has been fixed, just need to add a slash(/) at the end of
request url, for example, http://localhost:8192/testurl/


Jean-Baptiste Onofré wrote:
> 
> First, I take a look on your EJB issue. I will be able to take a look on 
> this issue after :)
> 
> Regards
> JB
> 
> laolong wrote:
>> 
>>  Could someone help on this issue? 
>> 
>> 
>> laolong wrote:
>>> Hi,
>>>
>>>    There is a http component to receive HTTP Post data and forward the
>>> data to another application,  request.getParameter("testparam") is empty
>>> when try to get the POST data from HttpServletRequest(in HTTPMarshaler
>>> class), I used HTML form and Java HTTP client to test but both failed.
>>> I'm
>>> sure the method is POST. 
>>>    It works when change to GET method. 
>>>    is it a bug of http component or Jetty? or something I need to
>>> config? 
>>>
>>>    Please advise.
>>>
>>>
>>> <http:provider service="tns:ProviderService"
>>>                endpoint="ep"
>>>                locationURI="http://localhost:8000/test/price" >
>>>     </http:provider>  
>>>
>>> <http:consumer service="tns:ConsumerService"
>>>                endpoint="jbi"
>>>                defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>>>                locationURI="http://0.0.0.0:8199/price"
>>>                targetService="tns:ProviderService"
>>>                marshaler="#marshaler" />
>>> 	<bean id="marshaler" class="demo.HTTPMarshaler" />
>>>
>>>
>>> public class HTTPMarshaler extends DefaultHttpConsumerMarshaler {
>>>
>>> 	private SourceTransformer sourceTransformer = new SourceTransformer();
>>>
>>> 	public MessageExchange createExchange(HttpServletRequest request,
>>> 			ComponentContext context) throws Exception {
>>>
>>> 		System.out.println("parm:"+getParameterList(request));
>>>
>>> 		MessageExchange me = context.getDeliveryChannel()
>>> 				.createExchangeFactory().createExchange(getDefaultMep());
>>> 		NormalizedMessage in = me.createMessage();
>>> 		try{
>>> 			in.setContent(new StringSource(request.getParameter("testparam")));
>>> 		}catch(Exception e){
>>> 			e.printStackTrace();
>>> 			in.setContent(new StringSource(getInputString(request)));
>>> 		}
>>> 		me.setMessage(in, "in");
>>> 		System.out.println("end createExchange");
>>> 		return me;
>>> 	}
>>> 	public static String getParameterList(HttpServletRequest request){
>>> 	     String parmStr="<?xml version=\"1.0\"?><ParameterList>\n";
>>> 	     java.util.Enumeration en=request.getParameterNames();
>>> 	     int i=0;
>>> 	     while (en.hasMoreElements()){
>>> 	       parmStr+="<Parameter index=\""+(++i)+"\">";
>>> 	       String name=en.nextElement().toString();
>>> 	       parmStr+="<Name>"+name+"</Name>";
>>> 	        parmStr += "<Value><!-- " +
>>> 	            request.getParameter(name) +
>>> 	            "--></Value>";
>>> 	       parmStr+="</Parameter>"+"\n";
>>> 	     }
>>> 	     en=request.getAttributeNames();	     
>>> 	     while (en.hasMoreElements()){
>>> 	       parmStr+="<Attribute index=\""+(++i)+"\">";
>>> 	       String name=en.nextElement().toString();
>>> 	       parmStr+="<Name>"+name+"</Name>";
>>> 	        parmStr += "<Value><!-- " +
>>> 	            request.getAttribute(name) +
>>> 	            "--></Value>";
>>> 	       parmStr+="</Attribute>"+"\n";
>>> 	     }
>>> 	     en=request.getHeaderNames();	     
>>> 	     while (en.hasMoreElements()){
>>> 	       parmStr+="<Header index=\""+(++i)+"\">";
>>> 	       String name=en.nextElement().toString();
>>> 	       parmStr+="<Name>"+name+"</Name>";
>>> 	        parmStr += "<Value><!-- " +
>>> 	            request.getHeader(name) +
>>> 	            "--></Value>";
>>> 	       parmStr+="</Header>"+"\n";
>>> 	     }
>>> 	       parmStr+="</ParameterList>"+"\n";
>>> 	     return parmStr;
>>> 	    }
>>>
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/HTTP-Post-method-issue-when-use-http%3Aconsumer-%28Jetty-issue-%29-tp23976283p23998663.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: HTTP Post method issue when use http:consumer (Jetty issue?)

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
First, I take a look on your EJB issue. I will be able to take a look on 
this issue after :)

Regards
JB

laolong wrote:
> 
>  Could someone help on this issue? 
> 
> 
> laolong wrote:
>> Hi,
>>
>>    There is a http component to receive HTTP Post data and forward the
>> data to another application,  request.getParameter("testparam") is empty
>> when try to get the POST data from HttpServletRequest(in HTTPMarshaler
>> class), I used HTML form and Java HTTP client to test but both failed. I'm
>> sure the method is POST. 
>>    It works when change to GET method. 
>>    is it a bug of http component or Jetty? or something I need to config? 
>>
>>    Please advise.
>>
>>
>> <http:provider service="tns:ProviderService"
>>                endpoint="ep"
>>                locationURI="http://localhost:8000/test/price" >
>>     </http:provider>  
>>
>> <http:consumer service="tns:ConsumerService"
>>                endpoint="jbi"
>>                defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>>                locationURI="http://0.0.0.0:8199/price"
>>                targetService="tns:ProviderService"
>>                marshaler="#marshaler" />
>> 	<bean id="marshaler" class="demo.HTTPMarshaler" />
>>
>>
>> public class HTTPMarshaler extends DefaultHttpConsumerMarshaler {
>>
>> 	private SourceTransformer sourceTransformer = new SourceTransformer();
>>
>> 	public MessageExchange createExchange(HttpServletRequest request,
>> 			ComponentContext context) throws Exception {
>>
>> 		System.out.println("parm:"+getParameterList(request));
>>
>> 		MessageExchange me = context.getDeliveryChannel()
>> 				.createExchangeFactory().createExchange(getDefaultMep());
>> 		NormalizedMessage in = me.createMessage();
>> 		try{
>> 			in.setContent(new StringSource(request.getParameter("testparam")));
>> 		}catch(Exception e){
>> 			e.printStackTrace();
>> 			in.setContent(new StringSource(getInputString(request)));
>> 		}
>> 		me.setMessage(in, "in");
>> 		System.out.println("end createExchange");
>> 		return me;
>> 	}
>> 	public static String getParameterList(HttpServletRequest request){
>> 	     String parmStr="<?xml version=\"1.0\"?><ParameterList>\n";
>> 	     java.util.Enumeration en=request.getParameterNames();
>> 	     int i=0;
>> 	     while (en.hasMoreElements()){
>> 	       parmStr+="<Parameter index=\""+(++i)+"\">";
>> 	       String name=en.nextElement().toString();
>> 	       parmStr+="<Name>"+name+"</Name>";
>> 	        parmStr += "<Value><!-- " +
>> 	            request.getParameter(name) +
>> 	            "--></Value>";
>> 	       parmStr+="</Parameter>"+"\n";
>> 	     }
>> 	     en=request.getAttributeNames();	     
>> 	     while (en.hasMoreElements()){
>> 	       parmStr+="<Attribute index=\""+(++i)+"\">";
>> 	       String name=en.nextElement().toString();
>> 	       parmStr+="<Name>"+name+"</Name>";
>> 	        parmStr += "<Value><!-- " +
>> 	            request.getAttribute(name) +
>> 	            "--></Value>";
>> 	       parmStr+="</Attribute>"+"\n";
>> 	     }
>> 	     en=request.getHeaderNames();	     
>> 	     while (en.hasMoreElements()){
>> 	       parmStr+="<Header index=\""+(++i)+"\">";
>> 	       String name=en.nextElement().toString();
>> 	       parmStr+="<Name>"+name+"</Name>";
>> 	        parmStr += "<Value><!-- " +
>> 	            request.getHeader(name) +
>> 	            "--></Value>";
>> 	       parmStr+="</Header>"+"\n";
>> 	     }
>> 	       parmStr+="</ParameterList>"+"\n";
>> 	     return parmStr;
>> 	    }
>>
> 

Re: HTTP Post method issue when use http:consumer (Jetty issue?)

Posted by laolong <le...@sina.com>.

 Could someone help on this issue? 


laolong wrote:
> 
> Hi,
> 
>    There is a http component to receive HTTP Post data and forward the
> data to another application,  request.getParameter("testparam") is empty
> when try to get the POST data from HttpServletRequest(in HTTPMarshaler
> class), I used HTML form and Java HTTP client to test but both failed. I'm
> sure the method is POST. 
>    It works when change to GET method. 
>    is it a bug of http component or Jetty? or something I need to config? 
> 
>    Please advise.
> 
> 
> <http:provider service="tns:ProviderService"
>                endpoint="ep"
>                locationURI="http://localhost:8000/test/price" >
>     </http:provider>  
> 
> <http:consumer service="tns:ConsumerService"
>                endpoint="jbi"
>                defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>                locationURI="http://0.0.0.0:8199/price"
>                targetService="tns:ProviderService"
>                marshaler="#marshaler" />
> 	<bean id="marshaler" class="demo.HTTPMarshaler" />
> 
> 
> public class HTTPMarshaler extends DefaultHttpConsumerMarshaler {
> 
> 	private SourceTransformer sourceTransformer = new SourceTransformer();
> 
> 	public MessageExchange createExchange(HttpServletRequest request,
> 			ComponentContext context) throws Exception {
> 
> 		System.out.println("parm:"+getParameterList(request));
> 
> 		MessageExchange me = context.getDeliveryChannel()
> 				.createExchangeFactory().createExchange(getDefaultMep());
> 		NormalizedMessage in = me.createMessage();
> 		try{
> 			in.setContent(new StringSource(request.getParameter("testparam")));
> 		}catch(Exception e){
> 			e.printStackTrace();
> 			in.setContent(new StringSource(getInputString(request)));
> 		}
> 		me.setMessage(in, "in");
> 		System.out.println("end createExchange");
> 		return me;
> 	}
> 	public static String getParameterList(HttpServletRequest request){
> 	     String parmStr="<?xml version=\"1.0\"?><ParameterList>\n";
> 	     java.util.Enumeration en=request.getParameterNames();
> 	     int i=0;
> 	     while (en.hasMoreElements()){
> 	       parmStr+="<Parameter index=\""+(++i)+"\">";
> 	       String name=en.nextElement().toString();
> 	       parmStr+="<Name>"+name+"</Name>";
> 	        parmStr += "<Value><!-- " +
> 	            request.getParameter(name) +
> 	            "--></Value>";
> 	       parmStr+="</Parameter>"+"\n";
> 	     }
> 	     en=request.getAttributeNames();	     
> 	     while (en.hasMoreElements()){
> 	       parmStr+="<Attribute index=\""+(++i)+"\">";
> 	       String name=en.nextElement().toString();
> 	       parmStr+="<Name>"+name+"</Name>";
> 	        parmStr += "<Value><!-- " +
> 	            request.getAttribute(name) +
> 	            "--></Value>";
> 	       parmStr+="</Attribute>"+"\n";
> 	     }
> 	     en=request.getHeaderNames();	     
> 	     while (en.hasMoreElements()){
> 	       parmStr+="<Header index=\""+(++i)+"\">";
> 	       String name=en.nextElement().toString();
> 	       parmStr+="<Name>"+name+"</Name>";
> 	        parmStr += "<Value><!-- " +
> 	            request.getHeader(name) +
> 	            "--></Value>";
> 	       parmStr+="</Header>"+"\n";
> 	     }
> 	       parmStr+="</ParameterList>"+"\n";
> 	     return parmStr;
> 	    }
> 

-- 
View this message in context: http://www.nabble.com/HTTP-Post-method-issue-when-use-http%3Aconsumer-%28Jetty-issue-%29-tp23976283p23980193.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.