001: /*
002: * ChainBuilder ESB
003: * Visual Enterprise Integration
004: *
005: * Copyright (C) 2006 Bostech Corporation
006: *
007: * This program is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License as published by the
009: * Free Software Foundation; either version 2 of the License, or (at your option)
010: * any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
014: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
015: * for more details.
016: *
017: * You should have received a copy of the GNU General Public License along with
018: * this program; if not, write to the Free Software Foundation, Inc.,
019: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: *
022: * $Id: NormalizedMessageVO.java 9970 2007-11-08 11:36:12Z fjin $
023: */
024: package com.bostechcorp.cbesb.runtime.ccsl.errordb;
025:
026: import java.io.ByteArrayOutputStream;
027: import java.io.InputStream;
028:
029: import javax.jbi.messaging.MessageExchange;
030: import javax.jbi.messaging.MessagingException;
031: import javax.jbi.messaging.NormalizedMessage;
032: import javax.xml.transform.Source;
033: import javax.xml.transform.Transformer;
034: import javax.xml.transform.TransformerFactory;
035: import javax.xml.transform.dom.DOMResult;
036: import javax.xml.transform.dom.DOMSource;
037: import javax.xml.transform.stream.StreamResult;
038: import javax.xml.transform.stream.StreamSource;
039:
040: import org.apache.commons.logging.Log;
041: import org.apache.commons.logging.LogFactory;
042: import org.apache.servicemix.jbi.messaging.InOnlyImpl;
043:
044: import com.bostechcorp.cbesb.runtime.ccsl.lib.ExceptionUtil;
045: import com.bostechcorp.cbesb.runtime.ccsl.nmhandler.StringSource;
046:
047: public class NormalizedMessageVO extends AbstractVO {
048: private long exchangeId;
049: private String type;
050: private NormalizedMessage message;
051: private String content;
052: protected static transient Log logger = LogFactory
053: .getLog(NormalizedMessageVO.class);
054:
055: public NormalizedMessageVO(long id, String type,
056: NormalizedMessage mess) {
057: exchangeId = id;
058: this .type = type;
059: message = mess;
060: }
061:
062: public NormalizedMessageVO() {
063:
064: }
065:
066: public NormalizedMessageVO(long id) {
067: this .exchangeId = id;
068: }
069:
070: public NormalizedMessageVO(long id, String type) {
071: this .exchangeId = id;
072: this .type = type;
073: }
074:
075: public long getExchangeId() {
076: return exchangeId;
077: }
078:
079: public void setExchangeId(long exchangeId) {
080: this .exchangeId = exchangeId;
081: }
082:
083: public String getType() {
084: return type;
085: }
086:
087: public void setType(String type) {
088: this .type = type;
089: }
090:
091: public String getContent() {
092: if (this .content == null) {
093: Source msgContent = message.getContent();
094: String s = "";
095: /*
096: * If the content is StreamSource then we convert it to StringSource to have
097: * an in-memory copy
098: */
099: if (msgContent instanceof StreamSource) {
100: try {
101: StringBuffer sb = new StringBuffer();
102: InputStream is = ((StreamSource) msgContent)
103: .getInputStream();
104: for (int ch = 0; (ch = is.read()) >= 0;) {
105: sb.append((char) ch);
106: }
107: is.close();
108: StringSource ss = new StringSource(new String(sb));
109: message.setContent(ss);
110: this .content = s.concat(ss.getText());
111: } catch (Exception e) {
112: logger
113: .error("Exception converting content to DOMSource: "
114: + e.getMessage());
115: if (logger.isDebugEnabled()) {
116: logger
117: .debug(
118: "Exception converting content to DOMSource:",
119: e);
120: }
121: this .content = s
122: .concat("Exception converting content to DOMSource: "
123: + e + "\n");
124: }
125: /*
126: * If it's a StringSource then we just grab the content
127: */
128: } else if (msgContent instanceof StringSource) {
129: this .content = s.concat(((StringSource) msgContent)
130: .getText());
131: /*
132: * If it's anything else then try to make it DOMSource
133: */
134: } else {
135: try {
136: DOMResult dr = new DOMResult();
137: TransformerFactory tf = TransformerFactory
138: .newInstance();
139: Transformer t = tf.newTransformer();
140: t.transform(msgContent, dr);
141: msgContent = new DOMSource(dr.getNode());
142: message.setContent(msgContent);
143: } catch (Exception e) {
144: logger
145: .error("Exception converting content to DOMSource: "
146: + e.getMessage());
147: if (logger.isDebugEnabled()) {
148: logger
149: .debug(
150: "Exception converting content to DOMSource:",
151: e);
152: }
153: this .content = s
154: .concat("Exception converting content to DOMSource: "
155: + e.getMessage()
156: + "\n"
157: + ExceptionUtil.stackTraceString(e));
158: }
159: }
160: if (msgContent instanceof DOMSource) {
161: try {
162: ByteArrayOutputStream baos = new ByteArrayOutputStream();
163: StreamResult result = new StreamResult(baos);
164: TransformerFactory tf = TransformerFactory
165: .newInstance();
166: Transformer t = tf.newTransformer();
167: t.setOutputProperty("indent", "yes");
168: t.transform(msgContent, result);
169: this .content = s.concat(baos.toString("utf-8")
170: + "\n");
171: } catch (Exception e) {
172: logger.error("Exception printing content: "
173: + e.getMessage());
174: if (logger.isDebugEnabled()) {
175: logger.debug("Exception printing content:", e);
176: }
177: this .content = s
178: .concat("Exception printing content: " + e
179: + "\n");
180: }
181: } else {
182: this .content = s
183: .concat("ERROR - content is not valid\n");
184: }
185: }
186: return this .content;
187: }
188:
189: public void setContent(String content) {
190: this.content = content;
191: }
192: }
|