JBoss Remoting SVN: r5196 - remoting2/branches/2.2/src/main/org/jboss/remoting.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-12 01:56:17 -0400 (Tue, 12 May 2009)
New Revision: 5196
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/Lease.java
Log:
JBREM-1129: Changed to be compatible with older versions that don't use leasePingerId and time stamp.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/Lease.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/Lease.java 2009-05-10 07:07:06 UTC (rev 5195)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/Lease.java 2009-05-12 05:56:17 UTC (rev 5196)
@@ -55,6 +55,7 @@
private boolean leaseUpdated = false;
private long lastUpdate;
+ private boolean useClientConnectionIdentity;
private static final Logger log = Logger.getLogger(Lease.class);
private static final boolean isTraceEnabled = log.isTraceEnabled();
@@ -70,8 +71,13 @@
{
this.requestPayload = (Map)requestPayload.get(ClientHolder.CLIENT_HOLDER_KEY);
this.leasePingerId = (String) requestPayload.get(LeasePinger.LEASE_PINGER_ID);
- this.lastUpdate = Long.valueOf((String) requestPayload.get(LeasePinger.TIME_STAMP)).longValue();
- if (isTraceEnabled) log.trace(this + " initialized with lastUpdate: " + lastUpdate);
+ String s = (String) requestPayload.get(LeasePinger.TIME_STAMP);
+ if (s != null)
+ {
+ this.lastUpdate = Long.valueOf(s).longValue();
+ this.useClientConnectionIdentity = true;
+ if (isTraceEnabled) log.trace(this + " initialized with lastUpdate: " + lastUpdate);
+ }
if (isTraceEnabled) log.trace(this + " initialized with requestPayload: " + this.requestPayload);
if (isTraceEnabled) log.trace("leasePingerId: " + leasePingerId);
}
@@ -94,41 +100,31 @@
{
if(requestMap != null)
{
- if (isTraceEnabled) log.trace(this + " requestMap: " + requestMap);
- long time = 0;
- String timeString = (String) requestMap.get(LeasePinger.TIME_STAMP);
- if (isTraceEnabled) log.trace(this + " timeString: " + timeString);
- time = Long.valueOf(timeString).longValue();
- if (isTraceEnabled) log.trace(this + " last update: " + lastUpdate + ", this update: " + time);
-
- if (time > lastUpdate)
+ synchronized (lock)
{
- synchronized (lock)
+ if (useClientConnectionIdentity)
{
- this.requestPayload = (Map)requestMap.get(ClientHolder.CLIENT_HOLDER_KEY);
-
- if (isTraceEnabled) log.trace(this + " updating: new Client list:");
- Collection clientHoldersCol = requestPayload.values();
- Iterator itr = clientHoldersCol.iterator();
- while (itr.hasNext())
+ if (isTraceEnabled) log.trace(this + " requestMap: " + requestMap);
+ long time = 0;
+ String timeString = (String) requestMap.get(LeasePinger.TIME_STAMP);
+ time = Long.valueOf(timeString).longValue();
+ if (isTraceEnabled) log.trace(this + " last update: " + lastUpdate + ", this update: " + time);
+ if (time > lastUpdate)
{
- Object val = itr.next();
- if (val != null && val instanceof ClientHolder)
- {
- ClientHolder clientHolder = (ClientHolder) val;
- if (isTraceEnabled) log.trace(leasePingerId + ": " + clientHolder.getSessionId());
- }
+ lastUpdate = time;
+ doUpdate(requestMap);
}
-
- lastUpdate = time;
- updateLease(leasePeriod);
+ else
+ {
+ if (isTraceEnabled) log.trace(this + " updating lease but not client list");
+ leaseUpdated = true;
+ }
}
+ else
+ {
+ doUpdate(requestMap);
+ }
}
- else
- {
- if (isTraceEnabled) log.trace(this + " updating lease but not client list");
- leaseUpdated = true;
- }
}
else
{
@@ -365,6 +361,28 @@
leaseTimerTask.cancel();
}
+ private void doUpdate(Map requestMap)
+ {
+ this.requestPayload = (Map)requestMap.get(ClientHolder.CLIENT_HOLDER_KEY);
+ if (isTraceEnabled)
+ {
+ log.trace(this + " updating: new Client list:");
+ Collection clientHoldersCol = requestPayload.values();
+ Iterator itr = clientHoldersCol.iterator();
+ while (itr.hasNext())
+ {
+ Object val = itr.next();
+ if (val != null && val instanceof ClientHolder)
+ {
+ ClientHolder clientHolder = (ClientHolder) val;
+ log.trace(leasePingerId + ": " + clientHolder.getSessionId());
+ }
+ }
+ }
+ updateLease(leasePeriod);
+ }
+
+
private class LeaseTimerTask extends TimerTask
{
16 years, 7 months
JBoss Remoting SVN: r5195 - remoting2/branches/2.2/src/tests/org/jboss/test/remoting/lease.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 03:07:06 -0400 (Sun, 10 May 2009)
New Revision: 5195
Modified:
remoting2/branches/2.2/src/tests/org/jboss/test/remoting/lease/InjectedConnectionListenerTestCase.java
Log:
JBREM-1129: Added some time before checking on ConnectionListeners.
Modified: remoting2/branches/2.2/src/tests/org/jboss/test/remoting/lease/InjectedConnectionListenerTestCase.java
===================================================================
--- remoting2/branches/2.2/src/tests/org/jboss/test/remoting/lease/InjectedConnectionListenerTestCase.java 2009-05-10 06:55:49 UTC (rev 5194)
+++ remoting2/branches/2.2/src/tests/org/jboss/test/remoting/lease/InjectedConnectionListenerTestCase.java 2009-05-10 07:07:06 UTC (rev 5195)
@@ -100,6 +100,7 @@
log.info("client disconnecting");
client.disconnect();
log.info("client disconnected");
+ Thread.sleep(2000);
assertTrue(TestConnectionListener.gotException);
shutdownServer();
@@ -138,6 +139,7 @@
log.info("client disconnecting");
client.disconnect();
log.info("client disconnected");
+ Thread.sleep(2000);
assertTrue(TestConnectionListener.gotException);
shutdownServer();
16 years, 7 months
JBoss Remoting SVN: r5194 - remoting2/branches/2.2/src/main/org/jboss/remoting/transport/bisocket.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:55:49 -0400 (Sun, 10 May 2009)
New Revision: 5194
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/transport/bisocket/BisocketServerInvoker.java
Log:
JBREM-1079: Reorganized cleanup().
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/transport/bisocket/BisocketServerInvoker.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/transport/bisocket/BisocketServerInvoker.java 2009-05-10 06:54:26 UTC (rev 5193)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/transport/bisocket/BisocketServerInvoker.java 2009-05-10 06:55:49 UTC (rev 5194)
@@ -515,11 +515,6 @@
protected void cleanup()
{
- super.cleanup();
-
- if (controlMonitorTimerTask != null)
- controlMonitorTimerTask.shutdown();
-
synchronized (controlConnectionThreadMap)
{
Iterator it = controlConnectionThreadMap.values().iterator();
@@ -531,6 +526,11 @@
}
}
+ super.cleanup();
+
+ if (controlMonitorTimerTask != null)
+ controlMonitorTimerTask.shutdown();
+
if (secondaryServerSocketThread != null)
secondaryServerSocketThread.shutdown();
@@ -834,14 +834,18 @@
return;
}
-
+ if (!running)
+ {
+ return;
+ }
+
try
{
processInvocation(socket);
}
catch (Exception e)
{
- log.error("Unable to create new ServerThread: " + e.getMessage(), e);
+ log.error(BisocketServerInvoker.this + " Unable to create new ServerThread: " + e.getMessage(), e);
}
}
}
16 years, 7 months
JBoss Remoting SVN: r5193 - remoting2/branches/2.2/src/main/org/jboss/remoting/callback.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:54:26 -0400 (Sun, 10 May 2009)
New Revision: 5193
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/callback/DefaultCallbackErrorHandler.java
Log:
JBREM-1079: Reduced level of a log statement.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/callback/DefaultCallbackErrorHandler.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/callback/DefaultCallbackErrorHandler.java 2009-05-10 06:51:39 UTC (rev 5192)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/callback/DefaultCallbackErrorHandler.java 2009-05-10 06:54:26 UTC (rev 5193)
@@ -125,7 +125,7 @@
throw ex;
}
- log.warn(this + " reached maximum number of callback errors allowed (" +
+ log.debug(this + " reached maximum number of callback errors allowed (" +
numOfErrorsAllowed + "). Will clean up callback hander now.");
if (serverInvoker != null)
16 years, 7 months
JBoss Remoting SVN: r5192 - remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/web.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:51:39 -0400 (Sun, 10 May 2009)
New Revision: 5192
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/web/ServerInvokerServlet.java
Log:
JBREM-1079: Added some logging.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/web/ServerInvokerServlet.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/web/ServerInvokerServlet.java 2009-05-10 06:51:10 UTC (rev 5191)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/web/ServerInvokerServlet.java 2009-05-10 06:51:39 UTC (rev 5192)
@@ -74,7 +74,15 @@
{
throw new ServletException("Could not find init parameter for 'locatorUrl' or 'locatorName' - one of which must be supplied for ServerInvokerServlet to function.");
}
+ else
+ {
+ log.debug("Got ServletServerInvoker from InvokerName: " + config.getInitParameter("invokerName"));
+ }
}
+ else
+ {
+ log.debug("Got ServletServerInvoker from InvokerLocator: " + config.getInitParameter("locatorUrl"));
+ }
}
/**
16 years, 7 months
JBoss Remoting SVN: r5191 - remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:51:10 -0400 (Sun, 10 May 2009)
New Revision: 5191
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/ServletServerInvoker.java
Log:
JBREM-1079: (1) Implements line preservation feature; (2) puts metadata in request parameter map; (3) allows client to determine content type.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/ServletServerInvoker.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/ServletServerInvoker.java 2009-05-10 06:49:22 UTC (rev 5190)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/transport/servlet/ServletServerInvoker.java 2009-05-10 06:51:10 UTC (rev 5191)
@@ -175,6 +175,21 @@
log.trace(" " + key + ": " + metadata.get(key));
}
}
+
+ // UnMarshaller may not be an HTTPUnMarshaller, in which case it
+ // can ignore this parameter.
+ Object o = configuration.get(HTTPUnMarshaller.PRESERVE_LINES);
+ if (o != null)
+ {
+ if (o instanceof String[])
+ {
+ metadata.put(HTTPUnMarshaller.PRESERVE_LINES, ((String[]) o)[0]);
+ }
+ else
+ {
+ metadata.put(HTTPUnMarshaller.PRESERVE_LINES, o);
+ }
+ }
String requestContentType = request.getContentType();
@@ -293,6 +308,24 @@
}
metadata.put(HTTPMetadataConstants.METHODTYPE, request.getMethod());
+
+ // UnMarshaller may not be an HTTPUnMarshaller, in which case it
+ // can ignore this parameter.
+ log.info("configuration: " + configuration);
+ Object o = configuration.get(HTTPUnMarshaller.PRESERVE_LINES);
+ log.info("preserveLines: " + o);
+ if (o != null)
+ {
+ if (o instanceof String[])
+ {
+ metadata.put(HTTPUnMarshaller.PRESERVE_LINES, ((String[]) o)[0]);
+ }
+ else
+ {
+ metadata.put(HTTPUnMarshaller.PRESERVE_LINES, o);
+ }
+ }
+
String path = request.getPathTranslated();
if (path != null)
metadata.put(HTTPMetadataConstants.PATH, path);
@@ -325,6 +358,16 @@
if(obj instanceof InvocationRequest)
{
invocationRequest = (InvocationRequest) obj;
+
+ Map requestMap = invocationRequest.getRequestPayload();
+ if (requestMap == null)
+ {
+ invocationRequest.setRequestPayload(metadata);
+ }
+ else
+ {
+ requestMap.putAll(metadata);
+ }
}
else
{
@@ -411,7 +454,15 @@
if(responseObject != null)
{
- String responseContentType = responseObject == null ? requestContentType : WebUtil.getContentType(responseObject);
+ String responseContentType = null;
+ if (responseMap != null)
+ {
+ responseContentType = (String) responseMap.get("Content-Type");
+ }
+ if(responseContentType == null)
+ {
+ responseContentType = responseObject == null ? requestContentType : WebUtil.getContentType(responseObject);
+ }
response.setContentType(responseContentType);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Marshaller marshaller = getMarshaller();
16 years, 7 months
JBoss Remoting SVN: r5190 - remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:49:22 -0400 (Sun, 10 May 2009)
New Revision: 5190
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPMetadataConstants.java
Log:
JBREM-1079: Added RESPONSE_HEADERS constant.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPMetadataConstants.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPMetadataConstants.java 2009-05-10 06:48:42 UTC (rev 5189)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPMetadataConstants.java 2009-05-10 06:49:22 UTC (rev 5190)
@@ -45,6 +45,12 @@
public static final String REMOTING_LEASE_QUERY_LOWER_CASE = "jboss-remoting-lease-query";
/**
+ * Key used for returning the value of java.net.URLConnection.getHeaderFields()
+ * in the metadata map passed to org.jboss.remoting.Client.invoke().
+ */
+ public static final String RESPONSE_HEADERS = "ResponseHeaders";
+
+ /**
* Configuration key for indicating if http client invoker should
* throw exception on error from server or just return the error
* as the response.
16 years, 7 months
JBoss Remoting SVN: r5189 - remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:48:42 -0400 (Sun, 10 May 2009)
New Revision: 5189
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPClientInvoker.java
Log:
JBREM-1079: (1) Implements line preservation feature; (2) puts response headers map in metadata map.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPClientInvoker.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPClientInvoker.java 2009-05-10 06:47:36 UTC (rev 5188)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/transport/http/HTTPClientInvoker.java 2009-05-10 06:48:42 UTC (rev 5189)
@@ -37,6 +37,7 @@
import org.jboss.remoting.marshal.VersionedUnMarshaller;
import org.jboss.remoting.marshal.compress.CompressingUnMarshaller;
import org.jboss.remoting.marshal.http.HTTPMarshaller;
+import org.jboss.remoting.marshal.http.HTTPUnMarshaller;
import org.jboss.remoting.marshal.serializable.SerializableUnMarshaller;
import org.jboss.remoting.serialization.ClassLoaderUtility;
import org.jboss.remoting.transport.servlet.ServletThrowable;
@@ -313,6 +314,7 @@
metadata.put(HTTPMetadataConstants.RESPONSE_CODE_MESSAGE, conn.getResponseMessage());
metadata.put(HTTPMetadataConstants.RESPONSE_CODE, new Integer(responseCode));
+ metadata.put(HTTPMetadataConstants.RESPONSE_HEADERS, headers);
InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
if (is != null || unmarshalNullStream)
@@ -344,6 +346,7 @@
metadata.put(HTTPMetadataConstants.RESPONSE_CODE_MESSAGE, conn.getResponseMessage());
responseCode = conn.getResponseCode();
metadata.put(HTTPMetadataConstants.RESPONSE_CODE, new Integer(responseCode));
+ metadata.put(HTTPMetadataConstants.RESPONSE_HEADERS, conn.getHeaderFields());
}
}
catch (Exception e)
@@ -526,9 +529,19 @@
unmarshaller = new CompressingUnMarshaller(MarshalFactory.getUnMarshaller(SerializableUnMarshaller.DATATYPE));
}
+ Map map = metadata == null ? headers : metadata;
+
+ // UnMarshaller may not be an HTTPUnMarshaller, in which case it
+ // can ignore this parameter.
+ if (map.get(HTTPUnMarshaller.PRESERVE_LINES) == null)
+ {
+ Object o = configuration.get(HTTPUnMarshaller.PRESERVE_LINES);
+ if (o != null)
+ map.put(HTTPUnMarshaller.PRESERVE_LINES, o);
+ }
+
try
{
- Map map = metadata == null ? headers : metadata;
if (unmarshaller instanceof VersionedUnMarshaller)
result = ((VersionedUnMarshaller)unmarshaller).read(is, map, Version.getDefaultVersion());
else
16 years, 7 months
JBoss Remoting SVN: r5188 - remoting2/branches/2.2/src/main/org/jboss/remoting/transport/coyote.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:47:36 -0400 (Sun, 10 May 2009)
New Revision: 5188
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/transport/coyote/CoyoteInvoker.java
Log:
JBREM-1079: Implements line preservation feature.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/transport/coyote/CoyoteInvoker.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/transport/coyote/CoyoteInvoker.java 2009-05-10 06:47:12 UTC (rev 5187)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/transport/coyote/CoyoteInvoker.java 2009-05-10 06:47:36 UTC (rev 5188)
@@ -34,6 +34,7 @@
import org.jboss.remoting.marshal.UnMarshaller;
import org.jboss.remoting.marshal.VersionedMarshaller;
import org.jboss.remoting.marshal.VersionedUnMarshaller;
+import org.jboss.remoting.marshal.http.HTTPUnMarshaller;
import org.jboss.remoting.security.SSLSocketBuilder;
import org.jboss.remoting.transport.coyote.ssl.RemotingSSLImplementation;
import org.jboss.remoting.transport.coyote.ssl.RemotingServerSocketFactory;
@@ -452,6 +453,13 @@
case Version.VERSION_2:
case Version.VERSION_2_2:
{
+ // UnMarshaller may not be an HTTPUnMarshaller, in which case it
+ // can ignore this parameter.
+ Object o = configuration.get(HTTPUnMarshaller.PRESERVE_LINES);
+ if (o != null)
+ {
+ request.put(HTTPUnMarshaller.PRESERVE_LINES, o);
+ }
receivedInvocationRequest.set(FALSE);
InvocationRequest invocationRequest = null;
16 years, 7 months
JBoss Remoting SVN: r5187 - remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/http.
by jboss-remoting-commits@lists.jboss.org
Author: ron.sigal(a)jboss.com
Date: 2009-05-10 02:47:12 -0400 (Sun, 10 May 2009)
New Revision: 5187
Modified:
remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/http/HTTPUnMarshaller.java
Log:
JBREM-1079: Implements line preservation feature.
Modified: remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/http/HTTPUnMarshaller.java
===================================================================
--- remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/http/HTTPUnMarshaller.java 2009-05-10 06:43:28 UTC (rev 5186)
+++ remoting2/branches/2.2/src/main/org/jboss/remoting/marshal/http/HTTPUnMarshaller.java 2009-05-10 06:47:12 UTC (rev 5187)
@@ -46,8 +46,10 @@
static final long serialVersionUID = 1085086661310576768L;
public final static String DATATYPE = "http";
+
+ public final static String PRESERVE_LINES = "preserveLines";
- protected final Logger log = Logger.getLogger(getClass());
+ protected final static Logger log = Logger.getLogger(HTTPUnMarshaller.class);
/**
* Will try to unmarshall data from inputstream. Will try to convert to either an object
@@ -79,6 +81,7 @@
int bufferSize = 1024;
byte[] byteBuffer = new byte[bufferSize];
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
+ boolean preserveLines = false;
boolean isChunked = false;
// check the metadat to see if is entry for content length
@@ -116,6 +119,15 @@
}
}
+ value = metadata.get(PRESERVE_LINES);
+ if (value != null)
+ {
+ if (value instanceof String)
+ {
+ preserveLines = Boolean.valueOf((String) value).booleanValue();
+ }
+ }
+
value = metadata.get("transfer-encoding");
if (value instanceof String && "chunked".equalsIgnoreCase((String)value))
{
@@ -154,19 +166,34 @@
BufferedReader reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(totalByteArray)));
StringBuffer buffer = new StringBuffer();
- String str = null;
- while((str = reader.readLine()) != null)
+
+ if (preserveLines)
{
- buffer.append(str);
+ if (log.isTraceEnabled()) log.trace("preserving cr/lf");
+ int len = 0;
+ char[] chars = new char[bufferSize];
+ while ((len = reader.read(chars)) > -1)
+ {
+ buffer.append(chars, 0, len);
+ }
}
+ else
+ {
+ if (log.isTraceEnabled()) log.trace("deleting cr/lf");
+ String str = null;
+ while((str = reader.readLine()) != null)
+ {
+ buffer.append(str);
+ }
+ }
+
reader.close();
-
ret = buffer.toString();
}
catch(Exception e)
{
- log.error("Can not unmarshall inputstream. Tried to unmarshall as both an object and string type.", e);
+ log.debug("Can not unmarshall inputstream. Tried to unmarshall as both an object and string type.", e);
throw new IOException("Can not unmarshall inputstream.");
}
16 years, 7 months