用于 Java 映射程序的 API。该 API 与映射到输出流的输入流一起使用。根据用例,应用程序开发人员可以选择其他 API 来执行实际映射(例如 SAXParser 或 DocumentBuilder 来解析 InputStream)。此外,映射 API 还提供了用于映射 XI 消息的特殊标头的类,该标头允许适配器传输适配器特定的信息(类 DynamicConfiguration 和 DynamicConfigurationKey)。
尽管以下示例仅将输入负载复制到输出负载,但它实质上显示了如何使用映射 API。有关详细信息,请参阅相应接口和类中的详细信息。
package exampleMapping;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import com.sap.aii.mapping.api.MappingTrace;
import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationConstants;
import com.sap.aii.mapping.api.StreamTransformationException;
/**
* Copy XML with a DOM.
*/
public class DomCopy implements StreamTransformation {
private MappingTrace trace;
/**
* Constructor for DomCopy.
*/
public DomCopy() {
super();
}
/**
* @see com.sap.aii.mapping.api.StreamTransformation#setParameter(Map)
*/
public void setParameter(Map param) {
trace = (MappingTrace) param.get(StreamTransformationConstants.MAPPING_TRACE);
}
/**
* @see com.sap.aii.mapping.api.StreamTransformation#execute(InputStream,
* OutputStream)
*/
public void execute(InputStream in, OutputStream out) throws StreamTransformationException {
try {
// read XML
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document xml = documentBuilder.parse(in);
// write XML
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Result result = new StreamResult(out);
Source domSource = new DOMSource(xml);
transformer.transform(domSource, result);
} catch (ParserConfigurationException e) {
trace.addWarning(e.getMessage());
throw new StreamTransformationException("Can not create DocumentBuilder.", e);
} catch (SAXException e) {
trace.addWarning(e.getMessage());
throw new StreamTransformationException("Can not read XML.", e);
} catch (IOException e) {
trace.addWarning(e.getMessage());
throw new StreamTransformationException("Can not read XML.", e);
} catch (TransformerConfigurationException e) {
trace.addWarning(e.getMessage());
throw new StreamTransformationException("Can not create Transformer.", e);
} catch (TransformerException e) {
trace.addWarning(e.getMessage());
throw new StreamTransformationException("Can not write XML.", e);
}
}
}