You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by an...@apache.org on 2002/08/01 13:24:07 UTC
cvs commit: xml-axis-wsif/java/src/org/apache/wsif/format WSIFFormatHandler.java
antelder 2002/08/01 04:24:07
Modified: java/src/org/apache/wsif/providers/jms JMSMessage.java
WSIFOperation_Jms.java
PrimitiveTypeFormatHandler.java
java/src/org/apache/wsif/format/jms JMSFormatHandler.java
java/src/org/apache/wsif/format WSIFFormatHandler.java
Log:
Tidy up and fix various problems with the native JMS provider.
Revision Changes Path
1.11 +60 -38 xml-axis-wsif/java/src/org/apache/wsif/providers/jms/JMSMessage.java
Index: JMSMessage.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/jms/JMSMessage.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- JMSMessage.java 26 Jul 2002 10:52:03 -0000 1.10
+++ JMSMessage.java 1 Aug 2002 11:24:06 -0000 1.11
@@ -232,6 +232,7 @@
org.apache.wsif.format.jms.JMSFormatHandler fh = getFormatHandler(partName);
if (fh != null) {
+ fh.setPartQName(partQName);
fh.setObjectPart(parts.get(partName));
fh.write(message);
}
@@ -275,6 +276,7 @@
org.apache.wsif.format.jms.JMSFormatHandler fh = getFormatHandler(partName);
if (fh != null) {
+ fh.setPartQName(partQName);
fh.setObjectPart(parts.get(partName));
// Send the message since it is the native format
@@ -361,6 +363,7 @@
org.apache.wsif.format.jms.JMSFormatHandler fh = getFormatHandler(partName);
if (fh != null) {
+ fh.setPartQName(partQName);
fh.setObjectPart(parts.get(partName));
fh.write(message);
}
@@ -392,6 +395,7 @@
org.apache.wsif.format.jms.JMSFormatHandler fh = getFormatHandler(partName);
if (fh != null) {
+ fh.setPartQName(partQName);
fh.setObjectPart(parts.get(partName));
fh.write(message);
result.put(partName, message.getObject());
@@ -475,7 +479,7 @@
wsifFormat = true;
// Need to make the message mutable
- message.clearBody();
+ //message.clearBody();
// Parse the document ignoring the document element which should be the message name
// The contents should represent the parts as elements
@@ -484,7 +488,7 @@
n = n.getNextSibling()) {
if (n.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
String partName = n.getLocalName();
-
+/*
java.io.ByteArrayOutputStream os = new java.io.ByteArrayOutputStream();
org.apache.xml.serialize.OutputFormat format =
@@ -502,15 +506,18 @@
// Get the contents
String partText = os.toString();
//String partContents = partText.substring(partText.indexOf(">") +1, partText.lastIndexOf("<"));
-
+*/
javax.wsdl.Part partModel = fieldMessageModel.getPart(partName);
org.apache.wsif.format.jms.JMSFormatHandler fh = getFormatHandler(partName);
if (fh != null) {
- message.setText(partText);
- fh.read(message);
+ //message.setText(partText);
+ //fh.read(message);
+ fh.setPartQName(new javax.xml.namespace.QName(fieldMessageModel.getQName().getNamespaceURI(), partModel.getName()));
+ fh.setObjectPart(n);
+
setObjectPart(partName, fh.getObjectPart());
// ?? Do I want to store the format handler instead???
@@ -518,13 +525,26 @@
} else {
// No format handler - pass the part contents directly
+ java.io.ByteArrayOutputStream os = new java.io.ByteArrayOutputStream();
+
+ org.apache.xml.serialize.OutputFormat format = new org.apache.xml.serialize.OutputFormat();
+ org.apache.xml.serialize.TextSerializer serializer = new org.apache.xml.serialize.TextSerializer();
+ serializer.setOutputFormat(format);
+ serializer.setOutputByteStream(os);
+
+ format.setOmitXMLDeclaration(true);
+
+ serializer.serialize((org.w3c.dom.Element)n);
+ os.flush();
+ // Get the contents
+ String partText = os.toString();
setObjectPart(partName, partText);
}
}
}
// Reset the message to original text
- message.setText(text);
+ //message.setText(text);
}
}
catch (JMSException e) {
@@ -540,43 +560,44 @@
// For all other exceptions ignore since it is likely due to parsing of a non-XML document
}
- if (!wsifFormat) {
- // Unknown format - either XML or Text
- // Pass the contents of the message to each part of the message model
- Object[] partNames = fieldMessageParts != null ?
- fieldMessageParts.toArray() :
- fieldMessageModel.getParts().keySet().toArray();
+ try {
+ if (!wsifFormat) {
+ // Unknown format - either XML or Text
+ // Pass the contents of the message to each part of the message model
+ Object[] partNames = fieldMessageParts != null ?
+ fieldMessageParts.toArray() :
+ fieldMessageModel.getParts().keySet().toArray();
- // should only be one part
- if (partNames.length != 1)
- throw new WSIFException(
- "There should only be one part defined in " + fieldMessageModel.getQName().getLocalPart());
+ // should only be one part
+ if (partNames.length != 1)
+ throw new WSIFException(
+ "There should only be one part defined in " + fieldMessageModel.getQName().getLocalPart());
- String partName = partNames[0].toString();
+ String partName = partNames[0].toString();
- javax.wsdl.Part partModel = fieldMessageModel.getPart(partName);
- JMSFormatHandler fh = getFormatHandler(partName);
+ javax.wsdl.Part partModel = fieldMessageModel.getPart(partName);
+ JMSFormatHandler fh = getFormatHandler(partName);
- if (fh != null) {
- fh.read(message);
+ if (fh != null) {
+ fh.setPartQName(new javax.xml.namespace.QName(fieldMessageModel.getQName().getNamespaceURI(), partModel.getName()));
+ fh.read(message);
- setObjectPart(partName, fh.getObjectPart());
+ setObjectPart(partName, fh.getObjectPart());
- // ?? Do I want to store the format handler instead???
- //partToFHMap.put(partKey, formatHandler);
+ // ?? Do I want to store the format handler instead???
+ //partToFHMap.put(partKey, formatHandler);
- }
- else {
- try {
+ }
+ else {
// No format handler - pass the part contents directly
setObjectPart(partName, message.getText());
}
- catch (JMSException e) {
- Trc.exception(e);
- throw new WSIFException("Error in read.", e);
- }
}
- }
+ }
+ catch (JMSException e) {
+ Trc.exception(e);
+ throw new WSIFException("Error in read.", e);
+ }
Trc.exit();
}
@@ -607,7 +628,7 @@
if (object instanceof java.util.Map
&& ((java.util.Map) object).containsKey(partNames[0])) {
// Need to make the message mutable
- message.clearBody();
+ //message.clearBody();
java.util.Map map = (java.util.Map) object;
@@ -622,9 +643,10 @@
if (fh != null) {
// Should be serializable since retrieved it over the wire
- message.setObject((java.io.Serializable) map.get(partName));
- fh.read(message);
-
+ //message.setObject((java.io.Serializable)map.get(partName));
+ //fh.read(message);
+ fh.setPartQName(new javax.xml.namespace.QName(fieldMessageModel.getQName().getNamespaceURI(), partModel.getName()));
+ fh.setObjectPart(map.get(partName));
setObjectPart(partName, fh.getObjectPart());
// ?? Do I want to store the format handler instead???
@@ -638,7 +660,7 @@
}
// Reset the message to original text
- message.setObject((java.io.Serializable) object);
+ //message.setObject((java.io.Serializable) object);
} else {
// It is an unknown format
// Pass the contents of the message to each part of the message model
@@ -656,7 +678,7 @@
JMSFormatHandler fh = getFormatHandler(partName);
if (fh != null) {
-
+ fh.setPartQName(new javax.xml.namespace.QName(fieldMessageModel.getQName().getNamespaceURI(), partModel.getName()));
fh.read(message);
setObjectPart(partName, fh.getObjectPart());
1.17 +84 -20 xml-axis-wsif/java/src/org/apache/wsif/providers/jms/WSIFOperation_Jms.java
Index: WSIFOperation_Jms.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/jms/WSIFOperation_Jms.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- WSIFOperation_Jms.java 29 Jul 2002 15:05:31 -0000 1.16
+++ WSIFOperation_Jms.java 1 Aug 2002 11:24:06 -0000 1.17
@@ -57,21 +57,23 @@
package org.apache.wsif.providers.jms;
-import java.util.List;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
-import javax.jms.Message;
import javax.wsdl.BindingOperation;
-import javax.wsdl.BindingOutput;
+import javax.wsdl.Input;
+import javax.wsdl.Message;
import javax.wsdl.Operation;
-import javax.wsdl.Port;
+import javax.wsdl.Output;
import javax.wsdl.Service;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.xml.namespace.QName;
import org.apache.wsif.WSIFConstants;
import org.apache.wsif.WSIFCorrelationId;
+import org.apache.wsif.WSIFCorrelationService;
import org.apache.wsif.WSIFException;
import org.apache.wsif.WSIFMessage;
import org.apache.wsif.WSIFOperation;
@@ -81,19 +83,18 @@
import org.apache.wsif.base.WSIFDefaultOperation;
import org.apache.wsif.logging.MessageLogger;
import org.apache.wsif.logging.Trc;
-import org.apache.wsif.WSIFCorrelationService;
import org.apache.wsif.util.WSIFCorrelationServiceLocator;
import org.apache.wsif.util.WSIFProperties;
import org.apache.wsif.util.jms.WSIFJMSCorrelationId;
import org.apache.wsif.util.jms.WSIFJMSDestination;
import org.apache.wsif.util.jms.WSIFJMSFinder;
+import org.apache.wsif.wsdl.extensions.jms.JMSAddress;
import org.apache.wsif.wsdl.extensions.jms.JMSBinding;
import org.apache.wsif.wsdl.extensions.jms.JMSConstants;
import org.apache.wsif.wsdl.extensions.jms.JMSInput;
import org.apache.wsif.wsdl.extensions.jms.JMSOutput;
import org.apache.wsif.wsdl.extensions.jms.JMSProperty;
import org.apache.wsif.wsdl.extensions.jms.JMSPropertyValue;
-import org.apache.wsif.wsdl.extensions.jms.JMSAddress;
/**
* WSIFOperation_Jms
@@ -403,10 +404,13 @@
* set the parts onto the message
*/
// The input message parts can either be a jms property
- // or an input part. If an input part, that part will
- // only be used if there is not a jms:input atribute,
- // or the part name is in the jms:input list
+ // or an input part. Input parts not defined in the
+ // WSDL will be ignored. Input parts will only be used
+ // if there is not a jms:input atribute, or the part
+ // name is in the jms:input list. Parts defined in the
+ // WSDL but not in the input message defualt to null.
String partName;
+ ArrayList wsdlInputParts = getWSDLInputPartNames();
HashMap propertyParts = getPropertyParts();
WSIFMessage message = createInputMessage();
for (Iterator i = input.getPartNames(); i.hasNext(); ) {
@@ -415,12 +419,20 @@
jmsDest.setProperty(
(String)propertyParts.get( partName ),
input.getObjectPart(partName) );
- } else if ( fieldInput == null ) {
- message.setObjectPart(partName, input.getObjectPart(partName));
- } else if ( fieldInput.getParts().contains( partName ) ) {
- message.setObjectPart(partName, input.getObjectPart(partName));
+ } else if ( wsdlInputParts.contains( partName ) ) {
+ wsdlInputParts.remove( partName );
+ if ( fieldInput == null ) {
+ message.setObjectPart(partName, input.getObjectPart(partName));
+ } else if ( fieldInput.getParts().contains( partName ) ) {
+ message.setObjectPart(partName, input.getObjectPart(partName));
+ }
}
}
+
+ // default missing parts to null
+ for (Iterator i=wsdlInputParts.iterator(); i.hasNext(); ) {
+ message.setObjectPart( (String) i.next(), null );
+ }
Service serviceModel = null;
for (Iterator i =
@@ -472,13 +484,29 @@
WSIFResponse resp =
formatter.unformatResponse((javax.jms.Message) responseObject);
- formatter.copyTo(resp.getOutgoingMessage(), output);
formatter.copyTo(resp.getFaultMessage(), fault);
+
+ // the output message contains all response parts
+ // even if not defined in the WSDL. Any parts
+ // defined in the WSDL but not in the response
+ // default to null
+ ArrayList wsdlOutputParts = getWSDLOutputPartNames();
+ WSIFMessage m = resp.getOutgoingMessage();
+ if ( m != null ) {
+ String partName;
+ for (Iterator i = m.getPartNames(); i.hasNext();) {
+ partName = (String) i.next();
+ output.setObjectPart( partName, m.getObjectPart(partName) );
+ wsdlOutputParts.remove( partName );
+ }
+ }
+ for (Iterator i = wsdlOutputParts.iterator(); i.hasNext(); ) {
+ output.setObjectPart( (String) i.next(), null );
+ }
/**
* Need to retrieve the header, property values from the JMS Message and assign them to WSIFMessage
*/
-
//setOutProperties( jmsDest, output ); TODO output properties
}
@@ -492,11 +520,13 @@
HashMap propertyParts = new HashMap();
// the input message properties
- for (Iterator i=fieldInputJmsProperties.keySet().iterator();i.hasNext(); ) {
- String propertyName = (String)i.next();
- propertyParts.put(
- propertyName,
- fieldInputJmsProperties.get( propertyName ) );
+ if ( fieldInputJmsProperties != null ) {
+ for (Iterator i=fieldInputJmsProperties.keySet().iterator();i.hasNext(); ) {
+ String propertyName = (String)i.next();
+ propertyParts.put(
+ propertyName,
+ fieldInputJmsProperties.get( propertyName ) );
+ }
}
return propertyParts;
@@ -810,6 +840,40 @@
if (jmsProps.size() > 0) {
dest.setProperties(jmsProps);
}
+ }
+
+ private ArrayList getWSDLInputPartNames() {
+ ArrayList wsdlInputParts = new ArrayList();
+ Input wsdlInput = fieldOperation.getInput();
+ if ( wsdlInput != null ) {
+ Message inputMessage = wsdlInput.getMessage();
+ String partName;
+ for (Iterator i=inputMessage.getParts().keySet().iterator(); i.hasNext(); ) {
+ partName = (String) i.next();
+ if ( fieldInputJmsProperties == null
+ || !fieldInputJmsProperties.containsKey( partName ) ) {
+ wsdlInputParts.add( partName );
+ }
+ }
+ }
+ return wsdlInputParts;
+ }
+
+ private ArrayList getWSDLOutputPartNames() {
+ ArrayList wsdlOutputParts = new ArrayList();
+ Output wsdlOutput = fieldOperation.getOutput();
+ if ( wsdlOutput != null ) {
+ Message outputMessage = wsdlOutput.getMessage();
+ String partName;
+ for (Iterator i=outputMessage.getParts().keySet().iterator(); i.hasNext(); ) {
+ partName = (String) i.next();
+ if ( fieldOutputProperties == null
+ || !fieldOutputProperties.containsKey( partName ) ) {
+ wsdlOutputParts.add( partName );
+ }
+ }
+ }
+ return wsdlOutputParts;
}
public String deep() {
1.5 +11 -7 xml-axis-wsif/java/src/org/apache/wsif/providers/jms/PrimitiveTypeFormatHandler.java
Index: PrimitiveTypeFormatHandler.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/jms/PrimitiveTypeFormatHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PrimitiveTypeFormatHandler.java 19 Jul 2002 15:46:29 -0000 1.4
+++ PrimitiveTypeFormatHandler.java 1 Aug 2002 11:24:06 -0000 1.5
@@ -57,18 +57,13 @@
package org.apache.wsif.providers.jms;
-import java.io.Serializable;
-import java.lang.reflect.Constructor;
import java.text.DateFormat;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.GregorianCalendar;
import javax.jms.JMSException;
import javax.jms.Message;
-import javax.jms.ObjectMessage;
-import javax.jms.TextMessage;
+import javax.xml.namespace.QName;
+
import org.apache.wsif.format.jms.JMSFormatHandler;
import org.apache.wsif.logging.Trc;
@@ -81,6 +76,7 @@
protected static DateFormat PRECISE_DATE_FORMAT =
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'");
+ QName name;
Object primitiveType;
Class type;
@@ -160,6 +156,10 @@
return 0;
}
+ public QName getPartQName() {
+ return name;
+ }
+
public void setObjectPart(Object arg0) {
primitiveType = arg0;
}
@@ -184,6 +184,10 @@
public void setDoublePart(double arg0) {
}
+
+ public void setPartQName(QName name) {
+ this.name = name;
+ }
/**
* @see JMSFormatHandler#write(Message)
1.2 +3 -3 xml-axis-wsif/java/src/org/apache/wsif/format/jms/JMSFormatHandler.java
Index: JMSFormatHandler.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/format/jms/JMSFormatHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JMSFormatHandler.java 6 Jun 2002 08:28:50 -0000 1.1
+++ JMSFormatHandler.java 1 Aug 2002 11:24:07 -0000 1.2
@@ -63,8 +63,8 @@
public interface JMSFormatHandler
extends org.apache.wsif.format.WSIFFormatHandler {
- public void write(javax.jms.Message message);
-
- public void read(javax.jms.Message message);
+ public void write(javax.jms.Message message) throws javax.jms.JMSException;
+
+ public void read(javax.jms.Message message) throws javax.jms.JMSException;
}
1.3 +5 -1 xml-axis-wsif/java/src/org/apache/wsif/format/WSIFFormatHandler.java
Index: WSIFFormatHandler.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/format/WSIFFormatHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- WSIFFormatHandler.java 14 Jun 2002 13:45:10 -0000 1.2
+++ WSIFFormatHandler.java 1 Aug 2002 11:24:07 -0000 1.3
@@ -57,7 +57,7 @@
package org.apache.wsif.format;
-import java.beans.PropertyChangeEvent;
+import javax.xml.namespace.QName;
/**
* @author Owen Burroughs <ow...@apache.org>
@@ -75,4 +75,8 @@
public Object getObjectPart();
public Object getObjectPart(Class sourceClass);
public void setObjectPart(Object objectPart);
+
+ public QName getPartQName();
+ public void setPartQName(QName name);
+
}