dims 2003/01/02 12:56:00
Modified: java/test/wsdl/interop4/groupG/dime/doc
AttachmentsBindingImpl.java
DimeDOCInteropTestCase.java
java/test/wsdl/interop4/groupG/dime/rpc
AttachmentsBindingImpl.java
DimeRPCInteropTestCase.java
java/src/org/apache/axis/attachments AttachmentsImpl.java
java/src/org/apache/axis/wsdl/toJava JavaStubWriter.java
java/src/org/apache/axis/client Stub.java
Log:
Final set of changes for Bug 13769 - Group G: SwA/DIME (attachments) WSDL Problems
Notes:
- This check-in adds impl for echoUnrefAttachments (dime/rpc and dime/doc)
Revision Changes Path
1.2 +6 -0
xml-axis/java/test/wsdl/interop4/groupG/dime/doc/AttachmentsBindingImpl.java
Index: AttachmentsBindingImpl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/test/wsdl/interop4/groupG/dime/doc/AttachmentsBindingImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AttachmentsBindingImpl.java 2 Jan 2003 00:02:42 -0000 1.1
+++ AttachmentsBindingImpl.java 2 Jan 2003 20:55:59 -0000 1.2
@@ -10,6 +10,8 @@
import org.apache.axis.Message;
import org.apache.axis.AxisEngine;
+import java.util.Collection;
+
public class AttachmentsBindingImpl implements
test.wsdl.interop4.groupG.dime.doc.AttachmentsPortType{
public org.apache.axis.attachments.OctetStream
echoAttachment(org.apache.axis.attachments.OctetStream in) throws
java.rmi.RemoteException {
return in;
@@ -30,6 +32,10 @@
}
public void echoUnrefAttachments() throws java.rmi.RemoteException {
+ org.apache.axis.Message reqMsg =
AxisEngine.getCurrentMessageContext().getRequestMessage();
+ Collection attachments = reqMsg.getAttachmentsImpl().getAttachments();
+ org.apache.axis.Message respMsg =
AxisEngine.getCurrentMessageContext().getResponseMessage();
+ respMsg.getAttachmentsImpl().setAttachmentParts(attachments);
}
public java.lang.String echoAttachmentAsString(java.lang.String in) throws
java.rmi.RemoteException {
1.3 +38 -0
xml-axis/java/test/wsdl/interop4/groupG/dime/doc/DimeDOCInteropTestCase.java
Index: DimeDOCInteropTestCase.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/test/wsdl/interop4/groupG/dime/doc/DimeDOCInteropTestCase.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DimeDOCInteropTestCase.java 2 Jan 2003 19:26:13 -0000 1.2
+++ DimeDOCInteropTestCase.java 2 Jan 2003 20:55:59 -0000 1.3
@@ -9,8 +9,16 @@
import java.net.URL;
import java.util.Arrays;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.ByteArrayInputStream;
import org.apache.axis.attachments.OctetStream;
+import org.apache.axis.client.Call;
+
+import javax.activation.DataSource;
+import javax.activation.DataHandler;
public class DimeDOCInteropTestCase extends junit.framework.TestCase {
public DimeDOCInteropTestCase(java.lang.String name) {
@@ -118,9 +126,39 @@
}
assertTrue("binding is null", binding != null);
+ class Src implements DataSource{
+ InputStream m_src;
+ String m_type;
+
+ public Src(InputStream data, String type){
+ m_src=data;
+ m_type=type;
+ }
+ public String getContentType(){
+ return m_type;
+ }
+ public InputStream getInputStream() throws IOException{
+ m_src.reset();
+ return m_src;
+ }
+ public String getName(){
+ return "Some-Data";
+ }
+ public OutputStream getOutputStream(){
+ throw new UnsupportedOperationException("I don't give output
streams");
+ }
+ }
+ ByteArrayInputStream ins=new
ByteArrayInputStream("EchoUnrefAttachments".getBytes());
+ DataHandler dh=new DataHandler(new Src(ins,"application/octetstream"));
+
+
+ ((org.apache.axis.client.Stub)binding).addAttachment(dh);
+
((org.apache.axis.client.Stub)binding)._setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT,
Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
// Test operation
binding.echoUnrefAttachments();
// TBD - validate results
+ Object attachments[] =
((org.apache.axis.client.Stub)binding).getAttachments();
+ assertEquals(1, attachments.length);
}
public void test6DimeDOCSoapPortEchoAttachmentAsString() throws Exception {
1.4 +6 -1
xml-axis/java/test/wsdl/interop4/groupG/dime/rpc/AttachmentsBindingImpl.java
Index: AttachmentsBindingImpl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/test/wsdl/interop4/groupG/dime/rpc/AttachmentsBindingImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AttachmentsBindingImpl.java 30 Dec 2002 14:36:44 -0000 1.3
+++ AttachmentsBindingImpl.java 2 Jan 2003 20:56:00 -0000 1.4
@@ -10,6 +10,8 @@
import org.apache.axis.AxisEngine;
import org.apache.axis.Message;
+import java.util.Collection;
+
public class AttachmentsBindingImpl implements
test.wsdl.interop4.groupG.dime.rpc.AttachmentsPortType{
public org.apache.axis.attachments.OctetStream
echoAttachment(org.apache.axis.attachments.OctetStream in) throws
java.rmi.RemoteException {
return in;
@@ -30,7 +32,10 @@
}
public void echoUnrefAttachments() throws java.rmi.RemoteException {
- //TODO: What do we do here?
+ org.apache.axis.Message reqMsg =
AxisEngine.getCurrentMessageContext().getRequestMessage();
+ Collection attachments = reqMsg.getAttachmentsImpl().getAttachments();
+ org.apache.axis.Message respMsg =
AxisEngine.getCurrentMessageContext().getResponseMessage();
+ respMsg.getAttachmentsImpl().setAttachmentParts(attachments);
}
public java.lang.String echoAttachmentAsString(java.lang.String in) throws
java.rmi.RemoteException {
1.4 +37 -0
xml-axis/java/test/wsdl/interop4/groupG/dime/rpc/DimeRPCInteropTestCase.java
Index: DimeRPCInteropTestCase.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/test/wsdl/interop4/groupG/dime/rpc/DimeRPCInteropTestCase.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DimeRPCInteropTestCase.java 30 Dec 2002 14:36:44 -0000 1.3
+++ DimeRPCInteropTestCase.java 2 Jan 2003 20:56:00 -0000 1.4
@@ -8,9 +8,16 @@
package test.wsdl.interop4.groupG.dime.rpc;
import org.apache.axis.attachments.OctetStream;
+import org.apache.axis.client.Call;
+import javax.activation.DataSource;
+import javax.activation.DataHandler;
import java.net.URL;
import java.util.Arrays;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.ByteArrayInputStream;
public class DimeRPCInteropTestCase extends junit.framework.TestCase {
public DimeRPCInteropTestCase(java.lang.String name) {
@@ -119,9 +126,39 @@
}
assertTrue("binding is null", binding != null);
+ class Src implements DataSource{
+ InputStream m_src;
+ String m_type;
+
+ public Src(InputStream data, String type){
+ m_src=data;
+ m_type=type;
+ }
+ public String getContentType(){
+ return m_type;
+ }
+ public InputStream getInputStream() throws IOException{
+ m_src.reset();
+ return m_src;
+ }
+ public String getName(){
+ return "Some-Data";
+ }
+ public OutputStream getOutputStream(){
+ throw new UnsupportedOperationException("I don't give output
streams");
+ }
+ }
+ ByteArrayInputStream ins=new
ByteArrayInputStream("EchoUnrefAttachments".getBytes());
+ DataHandler dh=new DataHandler(new Src(ins,"application/octetstream"));
+
+
+ ((org.apache.axis.client.Stub)binding).addAttachment(dh);
+
((org.apache.axis.client.Stub)binding)._setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT,
Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
// Test operation
binding.echoUnrefAttachments();
// TBD - validate results
+ Object attachments[] =
((org.apache.axis.client.Stub)binding).getAttachments();
+ assertEquals(1, attachments.length);
}
public void test6DimeRPCSoapPortEchoAttachmentAsString() throws Exception {
1.38 +5 -2
xml-axis/java/src/org/apache/axis/attachments/AttachmentsImpl.java
Index: AttachmentsImpl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/AttachmentsImpl.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- AttachmentsImpl.java 11 Dec 2002 22:38:08 -0000 1.37
+++ AttachmentsImpl.java 2 Jan 2003 20:56:00 -0000 1.38
@@ -308,10 +308,13 @@
if ((parts != null) && !parts.isEmpty()) {
for (java.util.Iterator i = parts.iterator(); i.hasNext();) {
- Part part = (Part) i.next();
+ Object part = i.next();
if (null != part) {
- addAttachmentPart(part);
+ if(part instanceof Part)
+ addAttachmentPart((Part)part);
+ else
+ createAttachmentPart(part);
}
}
}
1.110 +5 -0
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
Index: JavaStubWriter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
retrieving revision 1.109
retrieving revision 1.110
diff -u -r1.109 -r1.110
--- JavaStubWriter.java 2 Jan 2003 19:26:13 -0000 1.109
+++ JavaStubWriter.java 2 Jan 2003 20:56:00 -0000 1.110
@@ -736,6 +736,9 @@
// Set the headers
pw.println(" setRequestHeaders(_call);");
+ // Set the attachments
+ pw.println(" setAttachments(_call);");
+
// Set DIME flag if needed
if(bEntry.isOperationDIME(operation.getOperation().getName())) {
pw.println("
_call.setProperty(_call.ATTACHMENT_ENCAPSULATION_FORMAT,
_call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);");
@@ -796,6 +799,7 @@
if (allOuts > 0) {
pw.println(" else {");
pw.println(" getResponseHeaders(_call);");
+ pw.println(" extractAttachments(_call);");
if (allOuts == 1) {
if (parms.returnParam != null) {
@@ -843,6 +847,7 @@
pw.println(" }");
} else {
pw.println(" getResponseHeaders(_call);");
+ pw.println(" extractAttachments(_call);");
}
} // writeResponseHandling
1.20 +49 -4 xml-axis/java/src/org/apache/axis/client/Stub.java
Index: Stub.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Stub.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- Stub.java 1 Nov 2002 16:40:08 -0000 1.19
+++ Stub.java 2 Jan 2003 20:56:00 -0000 1.20
@@ -62,6 +62,7 @@
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import javax.xml.rpc.Service;
+import javax.activation.DataHandler;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
@@ -95,6 +96,9 @@
// Support for Header
private Vector headers = new Vector();
+ // Support for Attachments
+ private Vector attachments = new Vector();
+
// Flag to determine whether this is the first call to register type mappings.
// This need not be synchronized because firstCall is ONLY called from within
// a synchronized block in the generated stub code.
@@ -294,10 +298,9 @@
/**
* Set the header
- * @namespace namespace
+ * @param namespace
* @param partName that uniquely identify a header object.
* @param headerValue Object that is sent in the request as a SOAPHeader
- * @return void
*/
public void setHeader(String namespace, String partName, Object headerValue) {
headers.add(new SOAPHeaderElement(namespace, partName, headerValue));
@@ -311,6 +314,26 @@
}
/**
+ * Extract attachments
+ * @param call
+ */
+ public void extractAttachments(Call call) {
+ attachments.clear();
+ Iterator iterator = call.getResponseMessage().getAttachments();
+ while(iterator.hasNext()){
+ attachments.add(iterator.next());
+ }
+ }
+
+ /**
+ * Add an attachment
+ * @param handler
+ */
+ public void addAttachment(Object handler) {
+ attachments.add(handler);
+ }
+
+ /**
* Get the header element
*/
public SOAPHeaderElement getHeader(String namespace, String partName) {
@@ -333,13 +356,29 @@
}
/**
+ * Get the array of attachments
+ */
+ public Object[] getAttachments() {
+ Object[] array = new Object[attachments.size()];
+ attachments.copyInto(array);
+ attachments.clear();
+ return array;
+ }
+
+ /**
* This method clears both requestHeaders and responseHeaders hashtables.
- * @return void
*/
public void clearHeaders() {
headers.clear();
}
+ /**
+ * This method clears the request attachments.
+ */
+ public void clearAttachments() {
+ attachments.clear();
+ }
+
protected void setRequestHeaders(org.apache.axis.client.Call call) throws
AxisFault {
SOAPHeaderElement[] headers = getHeaders();
for(int i=0;i<headers.length;i++){
@@ -347,9 +386,15 @@
}
}
+ protected void setAttachments(org.apache.axis.client.Call call) throws
AxisFault {
+ Object[] attachments = getAttachments();
+ for(int i=0;i<attachments.length;i++){
+ call.addAttachmentPart(attachments[i]);
+ }
+ }
+
/**
* Helper method for updating headers from the response.
- * @return void
*/
protected void getResponseHeaders(org.apache.axis.client.Call call) throws
AxisFault {
org.apache.axis.Message response =
call.getMessageContext().getResponseMessage();