cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Gulley (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CXF-4075) The JAX-RS : Client API Unable to Handle Response Content Type "text/plain". Throws ClientWebApplicationException When Client Service Method is Invoked
Date Mon, 30 Jan 2012 19:08:10 GMT

     [ https://issues.apache.org/jira/browse/CXF-4075?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Nathan Gulley updated CXF-4075:
-------------------------------

    Description: 
The JAX-RS : Client API is unable to handle response content type "text/plain". The proxy
client throws a ClientWebApplicationException
when the service call is made:

org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body reader has been
found for class : class com.sears.forgotpassword.ForgotPassword, ContentType : text/plain.
	at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:593)
	at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:445)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:527)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188)
	at $Proxy16.forgotPassword(Unknown Source)
	at com.sears.mobilegateway.test.SHCAPIProfileServiceTest.testForgotPassword(SHCAPIProfileServiceTest.java:231)

WEB SERVICE URL: http://webservices.sears.com/shcapi/ForgotPassword?store=Sears&appID=MOB_IPH_SEARS_2GO&authID=xxxxxxxxxx&langId=-1&catalogId=12605&email=ngul23as196s9@yahoo.com

RESPONSE CONTENT TYPE: text/plain

RESPONSE CONTENT:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
       <ForgotPassword>
           <StatusData>
               <ResponseCode>0</ResponseCode>
               <RespMessage><![CDATA[Action is successful.Please check your email
account for instructions on how to choose your new password.]]></RespMessage>   
           </StatusData> 
           <ServiceHeaders>        
               <Store>        10153        </Store>        
               <LangId>        -1        </LangId>        
               <clientSessionKey>        3uDXyoc2vtZi35gk3UVdyOC        </clientSessionKey>
           </ServiceHeaders>
       </ForgotPassword>

Here are the detailed steps you need to follow in order to reproduce the bug:

1.  Define a REST client service class that points to a RESTful web service that returns content
type "text/plain"

CLASS:  import javax.ws.rs.GET;
        import javax.ws.rs.POST;
        import javax.ws.rs.Path;
        import javax.ws.rs.QueryParam;

        import com.sears.forgotpassword.ForgotPassword;        

        public interface SHCAPIProfileService {

          @Path("/shcapi/ForgotPassword") @GET 
	  public ForgotPassword forgotPassword(@QueryParam("email") String email,
					       @QueryParam("appID") String appID, 
				               @QueryParam("authID") String authID, 
					       @QueryParam("store") String store,
					       @QueryParam("catalogId") String catalogId,
					       @QueryParam("langId") String langId);
        }


2. Add the service class to your Spring configuration file as a CXF JAX-RS client bean. Configure
the bean to accept content type  
   "text/plain":

<jaxrs:client id="shcapiProfileService" address="https://webservices.sears.com:" serviceClass="com.sears.mobilegateway.service.SHCAPIProfileService"
inheritHeaders="true">
        <jaxrs:headers>
	    <entry key="Accept" value="text/plain"/>
	    <entry key="Accept" value="text/xml"/>		    
	</jaxrs:headers>
</jaxrs:client>


3. Use a Spring ApplicationContext to reference an instance of the client service bean in
your code:
 
   ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-business-context.xml");

   SHCAPIProfileService shcapiProfileService = (SHCAPIProfileService)applicationContext.getBean("shcapiProfileService");


4. Call the "forgotPassword" service method on the service class:

   ForgotPassword responseObj = shcapiProfileService.forgotPassword(LOGIN_ID, APP_ID, AUTH_ID,
STORE, CATALOG_ID, LANG_ID);	
	

5. The following ClientWebApplicationException is thrown when JAXB tries to unmarshall the
response content into the "ForgotPassword" Java object:

org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body reader has been
found for class : class com.sears.forgotpassword.ForgotPassword, ContentType : text/plain.
	at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:593)
	at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:445)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:527)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188)
	at $Proxy16.forgotPassword(Unknown Source)
	at com.sears.mobilegateway.test.SHCAPIProfileServiceTest.testForgotPassword(SHCAPIProfileServiceTest.java:231)
	
NOTE: This exception should not occur since we configured the service class to accept content
type "text/plain" in step 2.

      I tried work arounds such as customizing the proxy by running the following code before
making the client service call:

      WebClient.client(shcapiProfileService).accept("text/plain");

      However these had no effect. The same error occurs.
    


  was:
The JAX-RS : Client API is unable to handle response content type "text/plain". The proxy
client throws a ClientWebApplicationException
when the service call is made:

org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body reader has been
found for class : class com.sears.forgotpassword.ForgotPassword, ContentType : text/plain.
	at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:593)
	at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:445)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:527)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188)
	at $Proxy16.forgotPassword(Unknown Source)
	at com.sears.mobilegateway.test.SHCAPIProfileServiceTest.testForgotPassword(SHCAPIProfileServiceTest.java:231)

WEB SERVICE URL: http://webservices.sears.com/shcapi/ForgotPassword?store=Sears&appID=MOB_IPH_SEARS_2GO&authID=mrktplcC91F7F1DE2CE3F675A65C172B944C37301202010&langId=-1&catalogId=12605&email=ngul23as196s9@yahoo.com

RESPONSE CONTENT TYPE: text/plain

RESPONSE CONTENT:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
       <ForgotPassword>
           <StatusData>
               <ResponseCode>0</ResponseCode>
               <RespMessage><![CDATA[Action is successful.Please check your email
account for instructions on how to choose your new password.]]></RespMessage>   
           </StatusData> 
           <ServiceHeaders>        
               <Store>        10153        </Store>        
               <LangId>        -1        </LangId>        
               <clientSessionKey>        3uDXyoc2vtZi35gk3UVdyOC        </clientSessionKey>
           </ServiceHeaders>
       </ForgotPassword>

Here are the detailed steps you need to follow in order to reproduce the bug:

1.  Define a REST client service class that points to a RESTful web service that returns content
type "text/plain"

CLASS:  import javax.ws.rs.GET;
        import javax.ws.rs.POST;
        import javax.ws.rs.Path;
        import javax.ws.rs.QueryParam;

        import com.sears.forgotpassword.ForgotPassword;        

        public interface SHCAPIProfileService {

          @Path("/shcapi/ForgotPassword") @GET 
	  public ForgotPassword forgotPassword(@QueryParam("email") String email,
					       @QueryParam("appID") String appID, 
				               @QueryParam("authID") String authID, 
					       @QueryParam("store") String store,
					       @QueryParam("catalogId") String catalogId,
					       @QueryParam("langId") String langId);
        }


2. Add the service class to your Spring configuration file as a CXF JAX-RS client bean. Configure
the bean to accept content type  
   "text/plain":

<jaxrs:client id="shcapiProfileService" address="https://webservices.sears.com:" serviceClass="com.sears.mobilegateway.service.SHCAPIProfileService"
inheritHeaders="true">
        <jaxrs:headers>
	    <entry key="Accept" value="text/plain"/>
	    <entry key="Accept" value="text/xml"/>		    
	</jaxrs:headers>
</jaxrs:client>


3. Use a Spring ApplicationContext to reference an instance of the client service bean in
your code:
 
   ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-business-context.xml");

   SHCAPIProfileService shcapiProfileService = (SHCAPIProfileService)applicationContext.getBean("shcapiProfileService");


4. Call the "forgotPassword" service method on the service class:

   ForgotPassword responseObj = shcapiProfileService.forgotPassword(LOGIN_ID, APP_ID, AUTH_ID,
STORE, CATALOG_ID, LANG_ID);	
	

5. The following ClientWebApplicationException is thrown when JAXB tries to unmarshall the
response content into the "ForgotPassword" Java object:

org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body reader has been
found for class : class com.sears.forgotpassword.ForgotPassword, ContentType : text/plain.
	at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:593)
	at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:445)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:527)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487)
	at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188)
	at $Proxy16.forgotPassword(Unknown Source)
	at com.sears.mobilegateway.test.SHCAPIProfileServiceTest.testForgotPassword(SHCAPIProfileServiceTest.java:231)
	
NOTE: This exception should not occur since we configured the service class to accept content
type "text/plain" in step 2.

      I tried work arounds such as customizing the proxy by running the following code before
making the client service call:

      WebClient.client(shcapiProfileService).accept("text/plain");

      However these had no effect. The same error occurs.
    


    
> The JAX-RS : Client API Unable to Handle Response Content Type "text/plain". Throws ClientWebApplicationException
When Client Service Method is Invoked
> -------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-4075
>                 URL: https://issues.apache.org/jira/browse/CXF-4075
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.5
>         Environment: OS: Windows XP
> JDK Version: 6
>            Reporter: Nathan Gulley
>            Priority: Critical
>             Fix For: Invalid
>
>
> The JAX-RS : Client API is unable to handle response content type "text/plain". The proxy
client throws a ClientWebApplicationException
> when the service call is made:
> org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body reader has
been found for class : class com.sears.forgotpassword.ForgotPassword, ContentType : text/plain.
> 	at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:593)
> 	at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:445)
> 	at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:527)
> 	at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487)
> 	at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188)
> 	at $Proxy16.forgotPassword(Unknown Source)
> 	at com.sears.mobilegateway.test.SHCAPIProfileServiceTest.testForgotPassword(SHCAPIProfileServiceTest.java:231)
> WEB SERVICE URL: http://webservices.sears.com/shcapi/ForgotPassword?store=Sears&appID=MOB_IPH_SEARS_2GO&authID=xxxxxxxxxx&langId=-1&catalogId=12605&email=ngul23as196s9@yahoo.com
> RESPONSE CONTENT TYPE: text/plain
> RESPONSE CONTENT:
> <?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
>        <ForgotPassword>
>            <StatusData>
>                <ResponseCode>0</ResponseCode>
>                <RespMessage><![CDATA[Action is successful.Please check your
email account for instructions on how to choose your new password.]]></RespMessage>
  
>            </StatusData> 
>            <ServiceHeaders>        
>                <Store>        10153        </Store>        
>                <LangId>        -1        </LangId>        
>                <clientSessionKey>        3uDXyoc2vtZi35gk3UVdyOC        </clientSessionKey>
>            </ServiceHeaders>
>        </ForgotPassword>
> Here are the detailed steps you need to follow in order to reproduce the bug:
> 1.  Define a REST client service class that points to a RESTful web service that returns
content type "text/plain"
> CLASS:  import javax.ws.rs.GET;
>         import javax.ws.rs.POST;
>         import javax.ws.rs.Path;
>         import javax.ws.rs.QueryParam;
>         import com.sears.forgotpassword.ForgotPassword;        
>         public interface SHCAPIProfileService {
>           @Path("/shcapi/ForgotPassword") @GET 
> 	  public ForgotPassword forgotPassword(@QueryParam("email") String email,
> 					       @QueryParam("appID") String appID, 
> 				               @QueryParam("authID") String authID, 
> 					       @QueryParam("store") String store,
> 					       @QueryParam("catalogId") String catalogId,
> 					       @QueryParam("langId") String langId);
>         }
> 2. Add the service class to your Spring configuration file as a CXF JAX-RS client bean.
Configure the bean to accept content type  
>    "text/plain":
> <jaxrs:client id="shcapiProfileService" address="https://webservices.sears.com:" serviceClass="com.sears.mobilegateway.service.SHCAPIProfileService"
inheritHeaders="true">
>         <jaxrs:headers>
> 	    <entry key="Accept" value="text/plain"/>
> 	    <entry key="Accept" value="text/xml"/>		    
> 	</jaxrs:headers>
> </jaxrs:client>
> 3. Use a Spring ApplicationContext to reference an instance of the client service bean
in your code:
>  
>    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-business-context.xml");

>    SHCAPIProfileService shcapiProfileService = (SHCAPIProfileService)applicationContext.getBean("shcapiProfileService");
> 4. Call the "forgotPassword" service method on the service class:
>    ForgotPassword responseObj = shcapiProfileService.forgotPassword(LOGIN_ID, APP_ID,
AUTH_ID, STORE, CATALOG_ID, LANG_ID);	
> 	
> 5. The following ClientWebApplicationException is thrown when JAXB tries to unmarshall
the response content into the "ForgotPassword" Java object:
> org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body reader has
been found for class : class com.sears.forgotpassword.ForgotPassword, ContentType : text/plain.
> 	at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:593)
> 	at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:445)
> 	at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:527)
> 	at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487)
> 	at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188)
> 	at $Proxy16.forgotPassword(Unknown Source)
> 	at com.sears.mobilegateway.test.SHCAPIProfileServiceTest.testForgotPassword(SHCAPIProfileServiceTest.java:231)
> 	
> NOTE: This exception should not occur since we configured the service class to accept
content type "text/plain" in step 2.
>       I tried work arounds such as customizing the proxy by running the following code
before making the client service call:
>       WebClient.client(shcapiProfileService).accept("text/plain");
>       However these had no effect. The same error occurs.
>     

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message