snichol     2002/11/18 18:47:39

  Modified:    java/docs changes.html
               java/src/org/apache/soap/messaging Message.java
               java/src/org/apache/soap/rpc Call.java SOAPContext.java
               java/src/org/apache/soap/transport TransportMessage.java
               java/src/org/apache/soap/util/net HTTPUtils.java
  Log:
  Added client support for one-way calls as defined by WSDL.  The client
  receives a null Envelope for the messaging API or a null Response for the
  RPC API.  The RPC API was tested against a .NET server.
  
  Based in part on a submission by Pavel Ausianik <[EMAIL PROTECTED]>.
  
  Revision  Changes    Path
  1.51      +1 -0      xml-soap/java/docs/changes.html
  
  Index: changes.html
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/docs/changes.html,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- changes.html      18 Oct 2002 13:36:00 -0000      1.50
  +++ changes.html      19 Nov 2002 02:47:38 -0000      1.51
  @@ -95,6 +95,7 @@
         rather than throwing a NPE.</li>
         <li>Add client support for HTTP redirects.</li>
         <li>Allow additional transport headers to be specified by client.</li>
  +      <li>Add client support for one-way (as defined in WSDL) calls.</li>
       </ul>
     </li>
   </ul>
  
  
  
  1.12      +3 -1      xml-soap/java/src/org/apache/soap/messaging/Message.java
  
  Index: Message.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/messaging/Message.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Message.java      18 Oct 2002 13:36:00 -0000      1.11
  +++ Message.java      19 Nov 2002 02:47:38 -0000      1.12
  @@ -148,7 +148,7 @@
      * If the (root part of) the response does not have text/xml as the
      * Content-Type, null will be returned. If the response is not a
      * SOAP envelope, receive() should be used instead.
  -   * @return the envelope received
  +   * @return the envelope received or null if a one-way response was received.
      * @exception SOAPException if something goes wrong
      * @see #receive()
      */
  @@ -160,6 +160,8 @@
       }
       try {
         resCtx = st.getResponseSOAPContext ();
  +      if (resCtx.getOneWay())
  +        return null;
         String payloadStr = Call.getEnvelopeString (st);
   
         Document doc = 
  
  
  
  1.22      +5 -0      xml-soap/java/src/org/apache/soap/rpc/Call.java
  
  Index: Call.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/rpc/Call.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Call.java 14 Nov 2002 16:22:08 -0000      1.21
  +++ Call.java 19 Nov 2002 02:47:38 -0000      1.22
  @@ -312,6 +312,7 @@
      * @param url the URL to send the envelope to
      * @param SOAPActionURI the SOAPAction header field value
      * @param headers any other header fields to go to as protocol headers
  +   * @return The response or null for a one-way response.
      */
     public Response invoke(URL url, String SOAPActionURI, Hashtable headers) throws 
SOAPException
     {
  @@ -344,6 +345,10 @@
   
         // Get the response context.
         SOAPContext respCtx = st.getResponseSOAPContext();
  +
  +      // Check for a one-way reponse.
  +      if (respCtx.getOneWay())
  +        return null;
   
         // Pre-read the response root part as a String to be able to
         // log it in an exception if parsing fails.
  
  
  
  1.15      +15 -0     xml-soap/java/src/org/apache/soap/rpc/SOAPContext.java
  
  Index: SOAPContext.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/rpc/SOAPContext.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SOAPContext.java  14 Nov 2002 16:22:08 -0000      1.14
  +++ SOAPContext.java  19 Nov 2002 02:47:38 -0000      1.15
  @@ -89,6 +89,7 @@
       protected boolean       docLitSerialization = false;
       protected Boolean       gzip = null;
       protected Boolean       acceptGzip = null;
  +    protected boolean       oneWay = false;
   
       // Constants for checking type for base64 encoding
       private static MimeType MIME_STREAM;
  @@ -748,6 +749,20 @@
        */
       public Object getDeserializedMultiRef(String id) {
           return deserializedMultiRef.get(id);
  +    }
  +
  +    /**
  +     * Gets whether this is a one-way response.
  +     */
  +    public boolean getOneWay() {
  +        return oneWay;
  +    }
  +
  +    /**
  +     * Sets whether this is a one-way response.
  +     */
  +    public void setOneWay(boolean oneWay) {
  +        this.oneWay = oneWay;
       }
   
       /**
  
  
  
  1.21      +4 -1      
xml-soap/java/src/org/apache/soap/transport/TransportMessage.java
  
  Index: TransportMessage.java
  ===================================================================
  RCS file: 
/home/cvs/xml-soap/java/src/org/apache/soap/transport/TransportMessage.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- TransportMessage.java     14 Nov 2002 16:22:09 -0000      1.20
  +++ TransportMessage.java     19 Nov 2002 02:47:38 -0000      1.21
  @@ -265,9 +265,12 @@
                               contentType.substring(pos+1) ;
               cType = MimeUtils.getContentType(contentType);
           }
  -        if (cType == null)
  +        if (cType == null) {
  +            if (ctx.getOneWay())
  +                return null;
               throw new SOAPException(Constants.FAULT_CODE_PROTOCOL,
                                       "Missing content type.");
  +        }
   
           // Check encoding
           String encoding = (String) HTTPUtils.getHeaderValue(headers,
  
  
  
  1.38      +6 -0      xml-soap/java/src/org/apache/soap/util/net/HTTPUtils.java
  
  Index: HTTPUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/net/HTTPUtils.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- HTTPUtils.java    18 Nov 2002 17:55:54 -0000      1.37
  +++ HTTPUtils.java    19 Nov 2002 02:47:38 -0000      1.38
  @@ -607,6 +607,7 @@
                 "Error parsing HTTP header line \"" + new String(linebuf, 0, count, 
ISO_8859_1) + "\": " + e, e);
         }
   
  +      boolean isOneWay = false;
         /* Handle redirect here */
         if (statusCode >= HttpURLConnection.HTTP_MULT_CHOICE &&
             statusCode <= HttpURLConnection.HTTP_USE_PROXY &&
  @@ -622,6 +623,9 @@
                 return post(newURL, request, timeout, httpProxyHost, httpProxyPort,
                      outputBufferSize, tcpNoDelay, null, responseCopy, numRedirects);
             }
  +      } else if (statusCode == HttpURLConnection.HTTP_ACCEPTED) {
  +          // One-way message response
  +          isOneWay = true;
         }
   
         // TODO: process differently depending on statusCode and respContentLength
  @@ -635,6 +639,8 @@
         try {
             // Create response SOAPContext.
             ctx = new SOAPContext();
  +          ctx.setOneWay(isOneWay);
  +
             // Read content.
             response = new TransportMessage(bInStream, respContentLength,
                                             respContentType, ctx, respHeaders);
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to