1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/**
* Copyright 2011 IAAS University of Stuttgart <br>
* <br>
*
* @author uwe.breitenbuecher@iaas.uni-stuttgart.de
*
*/
package de.unistuttgart.iaas.bpel.util;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.ode.bpel.common.FaultException;
import org.apache.ode.bpel.evar.ExternalVariableModuleException;
import org.apache.ode.bpel.o.OScope.Variable;
import org.apache.ode.bpel.runtime.extension.ExtensionContext;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class BpelUtil {
/**
* This function writes a passed content to a specified processVariable
* (referenced by name). The content will be converted into its
* DOM-Representation for overwriting the processVariableContent (therefore
* it has to be XML-serializable, e.g. for complex data types there have to
* be JAX-B Annotations within the corresponding Class)
*
* @param context ExtensionContext needed to access the processVariable
* @param content New content for the specified processVariable
* @param processVariableName Variable whose content has to be overwritten
* @throws FaultException
*/
public static void writeContentToBPELVariable(ExtensionContext context, Object content, String processVariableName, String wrapper) throws FaultException {
// check the node
System.out.println("The content object: " + content + "\n");
// small hack for test
Node hackNode = null;
System.out.println("Trying to parse string to dom: " + ((String) content) + "\n");
if (wrapper != null) {
// a hack for simple type wrapper
content = "<" + wrapper + ">" + (String) content + "</" + wrapper + ">";
}
try {
hackNode = stringToDom((String) content);
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Variable bpelVariable = context.getVisibleVariables().get(processVariableName);
if (hackNode == null) {
System.out.println("hackNode is null! \n");
}
if (bpelVariable == null) {
System.out.println("bpelVariable is null! \n");
}
try {
// replaced responseAsNode to hackNode
context.writeVariable(bpelVariable, hackNode);
} catch (ExternalVariableModuleException e) {
e.printStackTrace();
}
}
/**
* This function writes a String to a BPEL Variable of type XSD-String
*
* @param context ExtensionContext
* @param responsePayload ResponsePayload as String
* @param processVariableName Name of the target BPEL variable
* @throws FaultException
*/
public static void writeResponsePayloadToVariable(ExtensionContext context, Object responsePayload, String processVariableName, String wrapper) throws FaultException {
BpelUtil.writeContentToBPELVariable(context, responsePayload, processVariableName, wrapper);
}
private static Node stringToDom(String xmlString) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xmlString));
Document d = builder.parse(is);
return d.getFirstChild();
}
}
|