I am new to web services technology and I am having some issue with calling a web service using the URL. Please help. I am getting the 405: Method not allowed error. I am sending a multi-part request to the webservice. The first part is a XML and other part is file.
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.File;
import java.io.FileInputStream;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import javax.xml.bind.DatatypeConverter;
import javax.xml.parsers.*;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class UploadAttachment {
ublic static void main(
String[] args ) throws Exception {
String strRSSinuityWebServiceBase = "http://host:port/MyService/";
String strServiceName = "attachments";
final String urlString = strRSSinuityWebServiceBase + strServiceName ;
final String userName = "TESTUSER";
final String password = "TESTUSE";
String lineEnd = "\r\n";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
java.io.File sourceFile = new java.io.File(sourcefile);
bufferSize = (int) sourceFile.lRSSth();
// open url connection
URL url = new URL( urlString );
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
byte[] encodedPassword = ( userName + ":" + password ).getBytes();
String encoded = DatatypeConverter.printBase64Binary(encodedPassword);
String strBoundry = "bJYQE";
con.setRequestProperty( "Authorization", "Basic " + encoded );
con.setRequestProperty("Content-Type","multipart/form-data;boundary="+strBoundry);
StringBuffer strBuffer1 = new StringBuffer();
strBuffer1.append("--"+strBoundry);
strBuffer1.append(lineEnd);
strBuffer1.append("Content-Disposition: form-data; name=\"xml\"");
strBuffer1.append(lineEnd);
strBuffer1.append("Content-Type: text/xml");
strBuffer1.append(lineEnd);
strBuffer1.append("Content-Transfer-Encoding: binary");
strBuffer1.append(lineEnd);
strBuffer1.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
strBuffer1.append(lineEnd);
strBuffer1.append("<RSS:Attachment xmlns:RSS=\"http://www.server.com/ServiceWebInterface_1.2\">");
strBuffer1.append(lineEnd);
strBuffer1.append("<RSS:DOcNumber>TRM010357</RSS:DOcNumber>");
strBuffer1.append(lineEnd);
strBuffer1.append("<RSS:DOCType>Stability Report</RSS:DOCType>");
strBuffer1.append(lineEnd);
strBuffer1.append("<RSS:Comments>Auto Uploaded file</RSS:Comments>");
strBuffer1.append(lineEnd);
strBuffer1.append("</RSS:Attachment>");
strBuffer1.append(lineEnd);
strBuffer1.append("--"+strBoundry);
strBuffer1.append(lineEnd);
strBuffer1.append("Content-Disposition: form-data; name=\"content\"; filename=\"ABC.pdf\"");
strBuffer1.append(lineEnd);
strBuffer1.append("Content-Type: application/octet-stream");
strBuffer1.append(lineEnd);
strBuffer1.append("Content-Transfer-Encoding: binary");
strBuffer1.append(lineEnd);
String strContent = strBuffer1.toString();
int fileLenth = strContent.lRSSth();
fileLenth = fileLenth+bufferSize;
con.setRequestProperty( "Content-Length", fileLenth+"");
OutputStream reqStream = con.getOutputStream();
reqStream.write(strContent.getBytes());
System.out.println("Inside the method strContent ");
FileInputStream fileInputStream = new FileInputStream(sourceFile);
bytesAvailable = fileInputStream.available();
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
reqStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
System.out.println("Inside the method strContent 2 "+con.getResponseMessage());
System.out.println(con.getResponseCode() + ":" + con.getResponseMessage()) ;
con.disconnect();
}