Hi,
I am getting error that my custom MessageBodyWriter is not found. following
is my code. Please let me know what went wrong.
My customMessageBodyWriter class
@Provider
@Produces("text/xml")
public class CustomResBodyWriter implements
MessageBodyWriter<ArrayList<Object>>
{
public static final int ARRAY_SIZE = 5000;
private static final Logger LOGGER =
Logger.getLogger(CustomResBodyWriter.class);
@Override
public long getSize(ArrayList<Object> arg0, Class<?> arg1,
java.lang.reflect.Type arg2,
Annotation[] arg3, MediaType arg4)
{
return arg0.size();
}
@Override
public boolean isWriteable(Class<?> arg0, java.lang.reflect.Type arg1,
Annotation[] arg2,
MediaType arg3)
{
return ArrayList.class.isAssignableFrom(arg0);
}
@Override
public void writeTo(ArrayList<Object> arg0, Class<?> arg1,
java.lang.reflect.Type arg2,
Annotation[] arg3, MediaType arg4,
MultivaluedMap<String, Object> arg5,
OutputStream arg6) throws IOException,
WebApplicationException
{
BufferedWriter bw = new BufferedWriter(new
OutputStreamWriter(arg6));
byte[] buffer = new byte[ARRAY_SIZE];
String ts = null;
int listSize = arg0.size();
FileInputStream fis = null;
for (int i = 0; i < listSize; i++)
{
File vFile = (File) arg0.get(i);
fis = new FileInputStream(vFile);
BufferedInputStream bufferedInputStream = new
BufferedInputStream(fis);
while (true)
{
int vBytesRead = bufferedInputStream.read(buffer, 0,
buffer.length);
if (vBytesRead < 0)
{
break;
}
arg6.write(buffer, 0, vBytesRead);
}
fis.close();
bufferedInputStream.close();
vFile = null;
}
arg6.flush();
}
}
my configuration.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:sec="http://cxf.apache.org/configuration/security"
xmlns:http="http://cxf.apache.org/transports/http/configuration"
xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/transports/http/configuration
http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://cxf.apache.org/configuration/security
http://cxf.apache.org/schemas/configuration/security.xsd
http://cxf.apache.org/core
http://cxf.apache.org/schemas/core.xsd">
<!-- do not use import statements if CXFServlet init parameters link to
this beans.xml -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"
/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="mapProvider"
class="com.traveltripper.stargazer.service.pms.opera.CustomResBodyWriter"/>
<jaxrs:server id="messageservice" address="/">
<jaxrs:features>
<cxf:logging/>
</jaxrs:features>
<jaxrs:serviceBeans>
<ref bean="messageBean" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="mapProvider" />
</jaxrs:providers>
</jaxrs:server>
<bean id="messageBean"
class="com.traveltripper.stargazer.service.pms.opera.ReservationXMLService"
/>
</beans>
my service implementation.
@GET
@Path("/message5")
@Produces("application/xml")
public ArrayList<Object> getMessage5(@QueryParam("propertyName")
String propertyName)
{
ArrayList<Object> fileList = new ArrayList<Object>();
try
{
LOGGER.info("propertyName in Request :" + propertyName);
String filePath = "c://";
LOGGER.info("FilePath=" + filePath);
File vDirpath = new File(filePath);
ArrayList<String> vProperties = new ArrayList<String>();
String dirname[] = vDirpath.list();
for (int i = 0; i < dirname.length; i++)
{
vProperties.add(dirname[i]);
LOGGER.info(dirname[i]);
}
if (vProperties.contains(propertyName))
{
filePath = filePath + propertyName + "/";
File propertyPath = new File(filePath);
File[] resFiles = propertyPath.listFiles();
for (int i = 0; i < resFiles.length; i++)
{
fileList.add(resFiles[i]);
}
}
}
catch (Exception e)
{
LOGGER.info(e.getMessage());
}
return fileList;
}
--
Regards,
Parimal
"Nothing is stationary,Change is a part of Life"