I am getting the following error and I tried all options. I remember
that similar code was working few months back without any custom
Serializers
1) Error in log
=========
----------------------------
ID: 1
Address: /xxxapi/xxxRestService/patientmatch/3/contacts/1
Encoding:
Content-Type:
Headers: {connection=[keep-alive], host=[localhost:8080],
user-agent=[Java/1.5.0_14], Content-Type=[null], Accept=[text/html,
Payload:
--------------------------------------
Oct 28, 2009 9:25:04 PM
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor
writeResponseErrorMessage
WARNING: .No message body writer found for response class :
UserContactResponse.
Oct 28, 2009 9:25:04 PM
org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
INFO: Outbound Message
---------------------------
ID: 1
Encoding:
Content-Type: text/xml
Headers: {Date=[Thu, 29 Oct 2009 04:25:04 GMT]}
Payload: .No message body writer found for response class :
UserContactResponse.
--------------------------------------
2) Interface class
package com.xxx.ws.rest;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.PathSegment;
import com.xxx.ws.soap.PatientMatchResp;
import com.xxx.ws.soap.UserContactResponse;
@Path("/patientmatch/")
@Consumes( { "application/xml" })
@Produces( { "application/xml" })
public interface XXXService {
@GET
@Path("/{userid}/contacts/{contactId}")
public UserContactResponse getContact(@PathParam("userid")
String userGuid, @PathParam("contactId")
String contactId);
}
3) Impl class
@WebService(endpointInterface = "com.xxx.ws.rest.XXXService",
serviceName = "/")
public class XXXServiceImpl implements XXXService {
private static Logger log = Logger.getLogger(XXXServiceImpl .class);
public UserContactResponse getContact(String userid, String contactId) {
// TODO Auto-generated method stub
UserContactResponse ucr = new UserContactResponse();
UserContact uc = new UserContact();
uc.setCity("fremont");
uc.setActive(true);
uc.setAptNumber("11");
uc.setChkPmtToCo(true);
uc.setCompany("fff");
ucr.setUserContact(uc);
return ucr;
}
}
4) UserContactResponse (this contains UserContact which has few String
and Long fieds. Thats all. No arrays or List)
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UserContactResponse", propOrder = { "userContact"
})
public class UserContactResponse {
@XmlElement(name = "UserContact", required = true)
UserContact userContact;
public UserContact getUserContact() {
return userContact;
}
public void setUserContact(UserContact userContact) {
this.userContact = userContact;
}
}
4) cxf-bean.xml file
<jaxws:endpoint
id="XXXService"
implementor="com.xxx.ws.soap.XXXServiceImpl"
address="/XXXService"/>
<bean id="xxxRestService" class="com.xxx.ws.rest.XXXServiceImpl" />
<jaxrs:server id="restServices" address="/xxxRestService">
<jaxrs:serviceBeans>
<ref bean="xxxRestService" />
</jaxrs:serviceBeans>
</jaxrs:server>
Regards
Karuna Pydipati
StubHub/eBay - Platform & Services
Phone: (415)222-8752
Email: [email protected] <mailto:[email protected]>