File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Servlets and the fly likes CharResponseWrapper Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Servlets
Bookmark "CharResponseWrapper" Watch "CharResponseWrapper" New topic


Matt Newboult

Joined: Feb 08, 2007
Posts: 2

I've read all of the forums but I'm stuck trying to use Filters to intercept a struts .do action using OC4J. I'm trying to intercept it to turn the html into a pdf. The filter is setup and working ok, but the code breaks when trying to get the CharResponseWrapper.

public final void doFilter(
final ServletRequest request,
final ServletResponse response,
final FilterChain chain) throws IOException, ServletException {

if (request instanceof HttpServletRequest) {
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpResp = (HttpServletResponse) response;

CharResponseWrapper wrapper = new CharResponseWrapper(httpResp);

System.out.println("*** wrapper: |" + wrapper.toString() + "|");
chain.doFilter(request, wrapper);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {

DocumentBuilder builder = DocumentBuilderFactory
Document doc = builder.parse(new InputSource(
new StringReader(wrapper.toString())));


The wrapper.toString() is empty! The CharResponseWrapper is the same as everyone else is using so can't see there being any problems there.

The exception is...

oracle.xml.parser.v2.XMLParseException: Start of root element expected.
at oracle.xml.parser.v2.XMLError.flushErrors1(
at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(
at oracle.xml.parser.v2.NonValidatingParser.parseDocument(
at oracle.xml.parser.v2.XMLParser.parse(
at oracle.xml.jaxp.JXDocumentBuilder.parse(

Any help, greatly appreciated.

Steve Luke

Joined: Jan 28, 2003
Posts: 4181

> The wrapper.toString() is empty!

Not surprising. The CharResponseWrapper will print the contents of the response in the toString() method. You put the
System.out.println("*** wrapper: |" + wrapper.toString() + "|");
line before the chain.doFilter(...) call, so you are trying to print the line before any response is written to it.

Try moving the System.out line after the chain.doFilter and see what output you get.

I agree. Here's the link:
subject: CharResponseWrapper
It's not a secret anymore!