package org.simpleframework.http.validate; import java.util.List; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Root; import org.simpleframework.xml.Text; /** * <request method='GET' target='/path.html'> * <header name='Content-Type'>text/plain</header> * <header name='Content-Length'>10</header> * <body>name=value&a=b</body> * </request> * */ @Root public class RequestTask { @Attribute private Method method; @Attribute private String target; @Element(data=true, required=false) private String body; @ElementList(inline=true) private List<Header> header; @Attribute(required=false) private boolean debug; public Method getMethod() { return method; } public String getTarget() { return target; } public byte[] getRequest() throws Exception { StringBuilder builder = new StringBuilder(); append(builder, null, false); String result = builder.toString(); if(debug) { System.out.println(result); } return result.getBytes("ISO-8859-1"); } public byte[] getRequest(int count) throws Exception { StringBuilder builder = new StringBuilder(); for(int i = 0; i < count -1; i++) { append(builder, i + 1, false); } append(builder, count, true); String result = builder.toString(); if(debug) { System.out.println(result); } return result.getBytes("ISO-8859-1"); } private void append(StringBuilder builder, Integer sequence, boolean close) { builder.append(method.name()); builder.append(" ").append(target); builder.append(" HTTP/1.1\r\n"); for(Header entry : header){ if(!entry.getName().equalsIgnoreCase("Content-Length") && !entry.getName().equalsIgnoreCase("Connection")) { entry.append(builder); } } int length = 0; if(body != null) { length = body.length(); } builder.append("Content-Length: ").append(length); builder.append("\r\n"); if(sequence != null) { builder.append("Sequence: "+sequence+"\r\n"); } if(close) { builder.append("Connection: close\r\n"); } else { builder.append("Connection: keep-alive\r\n"); } builder.append("\r\n"); if(length > 0) { builder.append(body); } } @Root private static class Header { @Attribute private String name; @Text private String value; private String getName(){ return name; } public void append(StringBuilder builder){ builder.append(name).append(": ").append(value).append("\r\n"); } } }