blob: 1031a2577cca62c72615bd82391331acd8086e3b (
plain)
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
|
package org.apache.tuscany.container.rhino.e4x;
import java.io.ByteArrayInputStream;
import javax.xml.namespace.QName;
import org.apache.tuscany.core.message.Message;
import org.apache.tuscany.core.wire.Interceptor;
import org.apache.tuscany.core.wire.InvocationRuntimeException;
import org.apache.tuscany.databinding.sdo.SDOXMLHelper;
import org.apache.xmlbeans.XmlObject;
import commonj.sdo.helper.TypeHelper;
public class E4XInterceptor implements Interceptor {
private Interceptor next;
private QName elementQN;
private TypeHelper typeHelper;
private ClassLoader classLoader;
E4XInterceptor(QName elementQN, TypeHelper typeHelper, ClassLoader classLoader) {
this.elementQN = elementQN;
this.typeHelper = typeHelper;
this.classLoader = classLoader;
}
public Message invoke(Message message) {
toXmlObject(message);
Message responseMessage = next.invoke(message);
fromXmlObject(responseMessage);
return responseMessage;
}
protected void toXmlObject(Message message) {
Object[] body = (Object[]) message.getBody();
byte[] xmlBytes = SDOXMLHelper.toXMLBytes(classLoader, typeHelper, body, elementQN, true);
try {
message.setBody(new Object[] { XmlObject.Factory.parse(new ByteArrayInputStream(xmlBytes)) });
} catch (Exception e) {
throw new InvocationRuntimeException(e);
}
}
protected void fromXmlObject(Message message) {
Object body = message.getBody();
if (body instanceof XmlObject) {
byte[] xmlBytes = ((XmlObject) body).toString().getBytes();
Object[] os = SDOXMLHelper.toObjects(classLoader, typeHelper, xmlBytes, true);
if (os == null || os.length < 1) {
message.setBody(os);
} else {
message.setBody(os[0]);
}
}
}
public void setNext(Interceptor next) {
this.next = next;
}
}
|