package com.sforce.async; import com.sforce.ws.ConnectionException; import com.sforce.ws.parser.PullParserException; import com.sforce.ws.parser.XmlInputStream; import com.sforce.ws.parser.XmlOutputStream; import com.sforce.ws.transport.Transport; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class BatchRequest { private XmlOutputStream xmlStream; private Transport transport; public BatchRequest(Transport transport, OutputStream out) throws IOException { this.transport = transport; this.xmlStream = new AsyncXmlOutputStream(out, false); this.xmlStream.setPrefix("xsi", "http://www.w3.org/2001/XMLSchema-instance"); this.xmlStream.writeStartTag("http://www.force.com/2009/06/asyncapi/dataload", "sObjects"); } public void addSObject(SObject object) throws AsyncApiException { try { object.write(this.xmlStream); } catch (IOException e) { throw new AsyncApiException("Failed to add SObject", AsyncExceptionCode.ClientInputError, e); } } public void addSObjects(SObject[] objects) throws AsyncApiException { byte b; int i; SObject[] arrayOfSObject; for (i = (arrayOfSObject = objects).length, b = 0; b < i; ) { SObject object = arrayOfSObject[b]; addSObject(object); b++; } } public BatchInfo completeRequest() throws AsyncApiException { try { this.xmlStream.writeEndTag("http://www.force.com/2009/06/asyncapi/dataload", "sObjects"); this.xmlStream.endDocument(); this.xmlStream.close(); InputStream in = this.transport.getContent(); if (this.transport.isSuccessful()) return loadBatchInfo(in); BulkConnection.parseAndThrowException(in, ContentType.XML); } catch (IOException e) { throw new AsyncApiException("Failed to complete request", AsyncExceptionCode.ClientInputError, e); } catch (PullParserException e) { throw new AsyncApiException("Failed to complete request", AsyncExceptionCode.ClientInputError, e); } catch (ConnectionException e) { throw new AsyncApiException("Failed to complete request", AsyncExceptionCode.ClientInputError, e); } return null; } static BatchInfo loadBatchInfo(InputStream in) throws PullParserException, IOException, ConnectionException { BatchInfo info = new BatchInfo(); XmlInputStream xin = new XmlInputStream(); xin.setInput(in, "UTF-8"); info.load(xin, BulkConnection.typeMapper); return info; } }