ну например есть базовый класс, он лежит в базовой jar. Эта jar собирается 1 раз и подключается к SAP. (Это ядро)
Вся реализация по трансформации из буфера в DOM и обратно находится в SAPMappingCustom.
Code:
public class SAPTransformationCustom extends AbstractTransformation implements ILogger{
protected SAPMappingCustom sap = new SAPMappingCustom();
private TransformationInput tr_in;
private boolean isRunSAP;
public SAPTransformationCustom(){
isRunSAP = false;
sap.setLogger(this);
}
protected String getDynamicConfiguration(String aNameSpace, String aName) {
return (tr_in != null) ? tr_in.getDynamicConfiguration().get(DynamicConfigurationKey.create(aNameSpace, aName)) : "";
}
@Override
public void transform(TransformationInput ti, TransformationOutput to) throws StreamTransformationException {
isRunSAP = true;
tr_in = ti;
sap.transform(ti.getInputPayload().getInputStream(), to.getOutputPayload().getOutputStream());
}
@Override
public void showMessage(String aMessage) {
if (isRunSAP) {
this.getTrace().addInfo(aMessage);
}
else {
System.out.println(aMessage);
}
}
@Override
public void errorMessage(String aMessage) {
showMessage(aMessage);
throw new RuntimeException(aMessage);
}
}
Затем любой разработчик, который будет создавать Java-маппинг, чтобы не писал фактически то, что лежит в SAPMappingCustom делает следующее:
Создает новый jar (который и будет указываться в Operation Mapping) и наследуется от SAPTransformationCustom
Code:
public class SAPMappingOrderCSVToJDBC extends SAPTransformationCustom implements ISAPMapping{
public static void main(String[] args) {
SAPMappingOrderCSVToJDBC mjm = new SAPMappingOrderCSVToJDBC();
try {
//Определяем откуда считывается xml и куда записывается xml
FileInputStream in = new FileInputStream("C:/In.xml");
FileOutputStream out = new FileOutputStream("C:/Out.xml");
//Вызываем парсер xml
mjm.sap.transform(in, out);
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
public SAPMappingOrderCSVToJDBC(){
super();
sap.setSAPMapping(this);
}
@Override
public void createXML(Document aIn, Document aOut) {
//тут преобразование из aIn в aOut
}
@Override
public String getXSD() {
return "тут лежит XSD по которой ядро будет проверять корректность XML в aIn";
}
}
В этом случае разработчик должен реализовать только 2 метода. Выполнить преобразование в createXML и указать XSD схему. Больше ничего реализовывать не надо.
Затем эта jar подключается и выбирается в Operation Mapping