Return-Path: Delivered-To: apmail-cxf-dev-archive@www.apache.org Received: (qmail 36937 invoked from network); 15 May 2009 07:38:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 15 May 2009 07:38:45 -0000 Received: (qmail 12256 invoked by uid 500); 15 May 2009 07:38:45 -0000 Delivered-To: apmail-cxf-dev-archive@cxf.apache.org Received: (qmail 12188 invoked by uid 500); 15 May 2009 07:38:44 -0000 Mailing-List: contact dev-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list dev@cxf.apache.org Received: (qmail 12178 invoked by uid 99); 15 May 2009 07:38:44 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 15 May 2009 07:38:44 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of freeman.fang@gmail.com designates 209.85.221.105 as permitted sender) Received: from [209.85.221.105] (HELO mail-qy0-f105.google.com) (209.85.221.105) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 15 May 2009 07:38:29 +0000 Received: by qyk3 with SMTP id 3so2746575qyk.24 for ; Fri, 15 May 2009 00:38:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:cc:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=65Z4fSm3RV52ueZ1NlXPlkSa+d9Qw+zOan6rKSPdZzs=; b=NVgpHqI6v1q04PDAqROhn0vwXdzo61lyBk2ApNHJJcvSCCJq50q7/rOUJPpTl7i9d4 mIaRzSeuHWApAARLlYIzPq7tYXnrihp0AMh4ASmG8E7wUfTES/YBuRptm5jV1bDbHlVC jPrE2tgoJZhFA8phFIvgdN671cPkGd8fFOm1A= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; b=PtXQOKba1geBECw4vlnrD/Y3rMep6JWuF3FEeuGgvpzF9WAoecskkCcV0G6AiTe+60 ysrzhfFjCc5WzNr+lttA8twJLuvnc5rjfGfi5RxG1g0o//lG/gNer9RoFTI6fUTEZ5xC D5W1LznKoZBQl+0e9wcxvSrz0+IS9MtqSXEAE= Received: by 10.224.20.129 with SMTP id f1mr2407025qab.10.1242373087859; Fri, 15 May 2009 00:38:07 -0700 (PDT) Received: from ?192.168.2.110? ([221.218.197.53]) by mx.google.com with ESMTPS id 8sm1472117qwj.21.2009.05.15.00.38.01 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 15 May 2009 00:38:05 -0700 (PDT) Message-ID: <4A0D1B8F.6010906@gmail.com> Date: Fri, 15 May 2009 15:36:47 +0800 From: Freeman Fang User-Agent: Thunderbird 1.5.0.2 (X11/20060524) MIME-Version: 1.0 To: Daniel Kulp CC: dev@cxf.apache.org Subject: Re: svn commit: r774058 [1/2] - in /cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/ rt/core/src/main/java/org/apache/cxf/attachment/ rt/core/src/main/java/org/apache/cxf/bindi... References: <20090512200853.5E9B123888FE@eris.apache.org> <4A0A980D.9070308@gmail.com> <200905141031.15448.dkulp@apache.org> In-Reply-To: <200905141031.15448.dkulp@apache.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org Hi Dan, You are absolutely correct, this property is more than just disabling the databinding, actually it disable whole soap processing, that's why we add soap binding related interceptors back in smx-cxf code. I agree this is weird, and your suggestion as remove databinding interceptors in smx-cxf code sounds good for me. I will revert my last change on cxf trunck and refactor smx-cxf accordingly. Thanks Freeman Daniel Kulp wrote: > Freeman, > > I see you added it back in. My couple thoughts: > > 1) If you are going to add it back in, probably keep the same name for > compatibility sake. > > 2) If you are going to change the name, change it to something like > "SOAP_PROCESSING_DISABLED" or similar. > > It really is more that disabling the databinding. It completely disables all > SOAP processing. That's really my biggest issue with it. With that > enabled, none of the WS-Addressing, WS-Security, etc... processing can/will > occur. Thus, you will probably end up with the same complaints we've had > with the Dispatch/Provider services that the refactoring now fixes. > Dispatch/Provider things can now take advantage of all the WS-* stuff that > they couldn't previously. WS-RM and WS-SecConv are the two major ones that > will probably have issues as those messages go to the same endpoint, but > aren't targeted at the endpoint. > > Honestly, my preference would be to mark it @deprecated with plans to remove > soon. IMO, SMX should (preferrably) allow the SOAP processing to continue. > Either that, or they should add code to remove any interceptors that are > problematic for them rather than pushing this type of thing into all the cxf > bindings. Basically, you are saying "I want a soap binding, but not really. > I don't want any soap stuff happening." A very bizzare situation. > > Dan > > > > On Wed May 13 2009 5:51:09 am Freeman Fang wrote: > >> Hi Dan, >> >> Would you please keep AbstractBindingFactory.DATABINDING_DISABLED logic >> still there? Because smx-cxf-bc depend on set >> AbstractBindingFactory.DATABINDING_DISABLED as true so that can skip >> marshal/unmarshal on cxf bc. >> May be create another property like SMX_DATABINDING_DISABLED and keep >> the previous logic here? >> Thanks >> Freeman >> >> dkulp@apache.org wrote: >> >>> Author: dkulp >>> Date: Tue May 12 20:08:51 2009 >>> New Revision: 774058 >>> >>> URL: http://svn.apache.org/viewvc?rev=774058&view=rev >>> Log: >>> [CXF-1907] Update to get the provider stuff refactored to go through the >>> normal interceptor chains. Dispatch/Providers now should be able to >>> participate in ws-addressing/security/rm. >>> >>> Added: >>> >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeInInterceptor.java (with props) >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeOutInterceptor.java (with props) Removed: >>> >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/AsyncRespo >>> nse.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchAs >>> yncCallable.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/lo >>> gical/DispatchLogicalHandlerInterceptor.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/so >>> ap/DispatchSOAPHandlerInterceptor.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/DispatchInDatabindingInterceptor.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/DispatchOutDatabindingInterceptor.java >>> cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/intercepto >>> rs/ Modified: >>> >>> cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/Soap >>> BindingFactory.java >>> cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBin >>> dingFactory.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/LazyAttachmentC >>> ollection.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/AbstractBindingFac >>> tory.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStre >>> amDataReader.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInData >>> bindingInterceptor.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInIntercep >>> tor.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInIn >>> terceptor.java >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInte >>> rceptor.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchIm >>> pl.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServe >>> rFactoryBean.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsEndpointImpl.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsServiceFactoryBean.java >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/We >>> bServiceProviderConfiguration.java >>> cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/provider/P >>> roviderServiceFactoryTest.java >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/Dispatch >>> ClientServerTest.java >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/Attachme >>> ntProviderXMLClientServerTest.java >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWDOMSou >>> rcePayloadProvider.java >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWSoapMe >>> ssageProvider.java >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/Provider >>> RPCClientServerTest.java >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/datasour >>> ce/DataSourceProviderTest.java >>> >>> Modified: >>> cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/Soap >>> BindingFactory.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org >>> /apache/cxf/binding/soap/SoapBindingFactory.java?rev=774058&r1=774057&r2=7 >>> 74058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/Soap >>> BindingFactory.java (original) +++ >>> cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/Soap >>> BindingFactory.java Tue May 12 20:08:51 2009 @@ -355,47 +355,44 @@ >>> sb.getOutFaultInterceptors().add(new StaxOutInterceptor()); >>> sb.getOutFaultInterceptors().add(new >>> SoapOutInterceptor(getBus())); >>> >>> - //Do not add any interceptors if it is Provider/Dispatch >>> - if >>> (!Boolean.TRUE.equals(binding.getProperty(DATABINDING_DISABLED))) { - >>> sb.getInInterceptors().add(new AttachmentInInterceptor()); - >>> sb.getInInterceptors().add(new StaxInInterceptor()); - >>> sb.getInInterceptors().add(new SoapActionInInterceptor()); - >>> - sb.getOutInterceptors().add(new AttachmentOutInterceptor()); >>> - sb.getOutInterceptors().add(new StaxOutInterceptor()); >>> - sb.getOutInterceptors().add(new >>> SoapHeaderOutFilterInterceptor()); - >>> - if >>> (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(bindingStyle)) { >>> - sb.getInInterceptors().add(new RPCInInterceptor()); - >>> sb.getOutInterceptors().add(new RPCOutInterceptor()); - >>> } else if >>> (SoapBindingConstants.BINDING_STYLE_DOC.equalsIgnoreCase(bindingStyle) - >>> && >>> SoapBindingConstants.PARAMETER_STYLE_BARE.equalsIgnoreCase(parameterStyle >>> )) { - //sb.getInInterceptors().add(new >>> BareInInterceptor()); - sb.getInInterceptors().add(new >>> DocLiteralInInterceptor()); - if (hasWrapped) { >>> - sb.getOutInterceptors().add(new >>> WrappedOutInterceptor()); - } >>> - sb.getOutInterceptors().add(new BareOutInterceptor()); >>> - } else { >>> - //sb.getInInterceptors().add(new >>> WrappedInInterceptor()); - sb.getInInterceptors().add(new >>> DocLiteralInInterceptor()); - >>> sb.getOutInterceptors().add(new WrappedOutInterceptor()); - >>> sb.getOutInterceptors().add(new BareOutInterceptor()); - } >>> - sb.getInInterceptors().add(new SoapHeaderInterceptor()); >>> - >>> - sb.getInInterceptors().add(new >>> ReadHeadersInterceptor(getBus())); - >>> sb.getInInterceptors().add(new CheckFaultInterceptor()); - >>> sb.getInInterceptors().add(new MustUnderstandInterceptor()); - >>> sb.getOutInterceptors().add(new SoapPreProtocolOutInterceptor()); - >>> sb.getOutInterceptors().add(new SoapOutInterceptor(getBus())); - >>> sb.getOutFaultInterceptors().add(new >>> SoapOutInterceptor(getBus())); - >>> - // REVISIT: The phase interceptor chain seems to freak out >>> if this added - // first. Not sure what the deal is at the >>> moment, I suspect the - // ordering algorithm needs to be >>> improved >>> - sb.getInInterceptors().add(new URIMappingInterceptor()); >>> - } >>> + sb.getInInterceptors().add(new AttachmentInInterceptor()); >>> + sb.getInInterceptors().add(new StaxInInterceptor()); >>> + sb.getInInterceptors().add(new SoapActionInInterceptor()); >>> + >>> + sb.getOutInterceptors().add(new AttachmentOutInterceptor()); >>> + sb.getOutInterceptors().add(new StaxOutInterceptor()); >>> + sb.getOutInterceptors().add(new >>> SoapHeaderOutFilterInterceptor()); + >>> + if >>> (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(bindingStyle)) { >>> + sb.getInInterceptors().add(new RPCInInterceptor()); + >>> sb.getOutInterceptors().add(new RPCOutInterceptor()); + } else >>> if (SoapBindingConstants.BINDING_STYLE_DOC.equalsIgnoreCase(bindingStyle) >>> + && >>> SoapBindingConstants.PARAMETER_STYLE_BARE.equalsIgnoreCase(parameterStyle >>> )) { + //sb.getInInterceptors().add(new BareInInterceptor()); + >>> sb.getInInterceptors().add(new DocLiteralInInterceptor()); + >>> if (hasWrapped) { >>> + sb.getOutInterceptors().add(new >>> WrappedOutInterceptor()); + } >>> + sb.getOutInterceptors().add(new BareOutInterceptor()); >>> + } else { >>> + //sb.getInInterceptors().add(new WrappedInInterceptor()); >>> + sb.getInInterceptors().add(new DocLiteralInInterceptor()); >>> + sb.getOutInterceptors().add(new WrappedOutInterceptor()); >>> + sb.getOutInterceptors().add(new BareOutInterceptor()); >>> + } >>> + sb.getInInterceptors().add(new SoapHeaderInterceptor()); >>> + >>> + sb.getInInterceptors().add(new >>> ReadHeadersInterceptor(getBus())); + >>> sb.getInInterceptors().add(new CheckFaultInterceptor()); + >>> sb.getInInterceptors().add(new MustUnderstandInterceptor()); + >>> sb.getOutInterceptors().add(new SoapPreProtocolOutInterceptor()); + >>> sb.getOutInterceptors().add(new SoapOutInterceptor(getBus())); + >>> sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus())); + >>> + // REVISIT: The phase interceptor chain seems to freak out if >>> this added + // first. Not sure what the deal is at the moment, I >>> suspect the + // ordering algorithm needs to be improved >>> + sb.getInInterceptors().add(new URIMappingInterceptor()); >>> >>> if (version.getVersion() == 1.1) { >>> sb.getInFaultInterceptors().add(new >>> Soap11FaultInInterceptor()); >>> >>> Modified: >>> cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBin >>> dingFactory.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/xml/src/main/java/org/ >>> apache/cxf/binding/xml/XMLBindingFactory.java?rev=774058&r1=774057&r2=7740 >>> 58&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBin >>> dingFactory.java (original) +++ >>> cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBin >>> dingFactory.java Tue May 12 20:08:51 2009 @@ -27,6 +27,7 @@ >>> import org.apache.cxf.binding.xml.interceptor.XMLMessageInInterceptor; >>> import org.apache.cxf.binding.xml.interceptor.XMLMessageOutInterceptor; >>> import org.apache.cxf.interceptor.AttachmentInInterceptor; >>> +import org.apache.cxf.interceptor.AttachmentOutInterceptor; >>> import org.apache.cxf.interceptor.DocLiteralInInterceptor; >>> import org.apache.cxf.interceptor.StaxInInterceptor; >>> import org.apache.cxf.interceptor.StaxOutInterceptor; >>> @@ -42,17 +43,16 @@ >>> public Binding createBinding(BindingInfo binding) { >>> XMLBinding xb = new XMLBinding(binding); >>> >>> - if >>> (!Boolean.TRUE.equals(binding.getProperty(DATABINDING_DISABLED))) { - >>> xb.getInInterceptors().add(new AttachmentInInterceptor()); - >>> xb.getInInterceptors().add(new StaxInInterceptor()); - >>> xb.getInInterceptors().add(new URIMappingInterceptor()); - >>> xb.getInInterceptors().add(new DocLiteralInInterceptor()); - >>> xb.getInInterceptors().add(new XMLMessageInInterceptor()); - >>> - xb.getOutInterceptors().add(new StaxOutInterceptor()); >>> - xb.getOutInterceptors().add(new WrappedOutInterceptor()); >>> - xb.getOutInterceptors().add(new XMLMessageOutInterceptor()); >>> - } >>> + xb.getInInterceptors().add(new AttachmentInInterceptor()); >>> + xb.getInInterceptors().add(new StaxInInterceptor()); >>> + xb.getInInterceptors().add(new URIMappingInterceptor()); >>> + xb.getInInterceptors().add(new DocLiteralInInterceptor()); >>> + xb.getInInterceptors().add(new XMLMessageInInterceptor()); >>> + >>> + xb.getOutInterceptors().add(new AttachmentOutInterceptor()); >>> + xb.getOutInterceptors().add(new StaxOutInterceptor()); >>> + xb.getOutInterceptors().add(new WrappedOutInterceptor()); >>> + xb.getOutInterceptors().add(new XMLMessageOutInterceptor()); >>> >>> xb.getInFaultInterceptors().add(new XMLFaultInInterceptor()); >>> xb.getOutFaultInterceptors().add(new StaxOutInterceptor()); >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/LazyAttachmentC >>> ollection.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/attachment/LazyAttachmentCollection.java?rev=774058&r1=774057&r2=774058 >>> &view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/LazyAttachmentC >>> ollection.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/LazyAttachmentC >>> ollection.java Tue May 12 20:08:51 2009 @@ -122,6 +122,9 @@ >>> } >>> >>> public boolean isEmpty() { >>> + if (attachments.isEmpty()) { >>> + return !iterator().hasNext(); >>> + } >>> return attachments.isEmpty(); >>> } >>> >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/AbstractBindingFac >>> tory.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/binding/AbstractBindingFactory.java?rev=774058&r1=774057&r2=774058&view >>> =diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/AbstractBindingFac >>> tory.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/AbstractBindingFac >>> tory.java Tue May 12 20:08:51 2009 @@ -47,8 +47,6 @@ >>> >>> public abstract class AbstractBindingFactory implements BindingFactory, >>> WSDLBindingFactory { >>> >>> - public static final String DATABINDING_DISABLED = >>> "databinding.disabled"; - >>> protected Collection activationNamespaces; >>> >>> protected Bus bus; >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStre >>> amDataReader.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/databinding/source/XMLStreamDataReader.java?rev=774058&r1=774057&r2=774 >>> 058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStre >>> amDataReader.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStre >>> amDataReader.java Tue May 12 20:08:51 2009 @@ -19,9 +19,12 @@ >>> package org.apache.cxf.databinding.source; >>> >>> import java.io.IOException; >>> +import java.io.InputStream; >>> +import java.io.OutputStream; >>> import java.util.Collection; >>> import java.util.logging.Logger; >>> >>> +import javax.activation.DataSource; >>> import javax.xml.namespace.QName; >>> import javax.xml.stream.XMLStreamException; >>> import javax.xml.stream.XMLStreamReader; >>> @@ -52,19 +55,11 @@ >>> return read(null, input, part.getTypeClass()); >>> } >>> >>> - public Object read(QName name, XMLStreamReader input, Class type) { >>> + public Object read(final QName name, XMLStreamReader input, Class >>> type) { if (type != null) { >>> if (SAXSource.class.isAssignableFrom(type)) { >>> try { >>> - CachedOutputStream out = new CachedOutputStream(); >>> - try { >>> - XMLStreamWriter xsw = >>> StaxUtils.createXMLStreamWriter(out); - >>> StaxUtils.copy(input, xsw); >>> - xsw.close(); >>> - return new SAXSource(new >>> InputSource(out.getInputStream())); - } finally { >>> - out.close(); >>> - } >>> + return new SAXSource(new >>> InputSource(getInputStream(input))); } catch (IOException e) { >>> throw new Fault(new >>> Message("COULD_NOT_READ_XML_STREAM", LOG), e); } catch >>> (XMLStreamException e) { >>> @@ -72,25 +67,51 @@ >>> } >>> } else if (StreamSource.class.isAssignableFrom(type)) { >>> try { >>> - CachedOutputStream out = new CachedOutputStream(); >>> - try { >>> - XMLStreamWriter xsw = >>> StaxUtils.createXMLStreamWriter(out); - >>> StaxUtils.copy(input, xsw); >>> - xsw.close(); >>> - return new StreamSource(out.getInputStream()); >>> - } finally { >>> - out.close(); >>> - } >>> + return new StreamSource(getInputStream(input)); >>> } catch (IOException e) { >>> throw new Fault(new >>> Message("COULD_NOT_READ_XML_STREAM", LOG), e); } catch >>> (XMLStreamException e) { >>> throw new Fault(new >>> Message("COULD_NOT_READ_XML_STREAM", LOG), e); } >>> - } >>> + } else if (DataSource.class.isAssignableFrom(type)) { >>> + try { >>> + final InputStream ins = getInputStream(input); >>> + return new DataSource() { >>> + public String getContentType() { >>> + return "text/xml"; >>> + } >>> + public InputStream getInputStream() throws >>> IOException { + return ins; >>> + } >>> + public String getName() { >>> + return name.toString(); >>> + } >>> + public OutputStream getOutputStream() throws >>> IOException { + return null; >>> + } >>> + }; >>> + } catch (IOException e) { >>> + throw new Fault(new >>> Message("COULD_NOT_READ_XML_STREAM", LOG), e); + } catch >>> (XMLStreamException e) { >>> + throw new Fault(new >>> Message("COULD_NOT_READ_XML_STREAM", LOG), e); + } >>> + } >>> } >>> return read(input); >>> } >>> - >>> + private InputStream getInputStream(XMLStreamReader input) >>> + throws XMLStreamException, IOException { >>> + >>> + CachedOutputStream out = new CachedOutputStream(); >>> + try { >>> + XMLStreamWriter xsw = StaxUtils.createXMLStreamWriter(out); >>> + StaxUtils.copy(input, xsw); >>> + xsw.close(); >>> + return out.getInputStream(); >>> + } finally { >>> + out.close(); >>> + } >>> + } >>> public Object read(XMLStreamReader reader) { >>> // Use a DOMSource for now, we should really use a >>> StaxSource/SAXSource though for // performance reasons >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInData >>> bindingInterceptor.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/interceptor/AbstractInDatabindingInterceptor.java?rev=774058&r1=774057& >>> r2=774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInData >>> bindingInterceptor.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInData >>> bindingInterceptor.java Tue May 12 20:08:51 2009 @@ -19,6 +19,8 @@ >>> >>> package org.apache.cxf.interceptor; >>> >>> +import java.net.URI; >>> +import java.net.URISyntaxException; >>> import java.util.Collection; >>> import java.util.Iterator; >>> import java.util.ResourceBundle; >>> @@ -39,15 +41,18 @@ >>> import org.apache.cxf.service.Service; >>> import org.apache.cxf.service.model.BindingMessageInfo; >>> import org.apache.cxf.service.model.BindingOperationInfo; >>> +import org.apache.cxf.service.model.EndpointInfo; >>> import org.apache.cxf.service.model.MessageInfo; >>> import org.apache.cxf.service.model.MessagePartInfo; >>> import org.apache.cxf.service.model.OperationInfo; >>> +import org.apache.cxf.service.model.ServiceInfo; >>> import org.apache.cxf.service.model.ServiceModelUtil; >>> import org.apache.cxf.staxutils.DepthXMLStreamReader; >>> import org.apache.cxf.wsdl.EndpointReferenceUtils; >>> >>> public abstract class AbstractInDatabindingInterceptor extends >>> AbstractPhaseInterceptor { - >>> + public static final String NO_VALIDATE_PARTS = >>> AbstractInDatabindingInterceptor.class.getName() + >>> + ".novalidate-parts"; private static final >>> QName XSD_ANY = new QName("http://www.w3.org/2001/XMLSchema", "anyType", >>> "xsd"); >>> >>> private static final ResourceBundle BUNDLE = BundleUtils >>> @@ -136,17 +141,19 @@ >>> * @return >>> */ >>> protected MessagePartInfo findMessagePart(Exchange exchange, >>> Collection operations, - >>> QName name, boolean client, int index) { + >>> QName name, boolean client, int index, + >>> Message message) { Endpoint ep = >>> exchange.get(Endpoint.class); >>> MessagePartInfo lastChoice = null; >>> + BindingMessageInfo msgInfo = null; >>> + BindingOperationInfo boi = null; >>> for (Iterator itr = operations.iterator(); >>> itr.hasNext();) { OperationInfo op = itr.next(); >>> >>> - BindingOperationInfo boi = >>> ep.getEndpointInfo().getBinding().getOperation(op); + boi = >>> ep.getEndpointInfo().getBinding().getOperation(op); if (boi == null) { >>> continue; >>> } >>> - BindingMessageInfo msgInfo = null; >>> if (client) { >>> msgInfo = boi.getOutput(); >>> } else { >>> @@ -182,9 +189,49 @@ >>> itr.remove(); >>> } >>> } >>> + if (lastChoice != null) { >>> + setMessage(message, boi, client, >>> boi.getBinding().getService(), msgInfo.getMessageInfo()); + } >>> return lastChoice; >>> } >>> + protected MessageInfo setMessage(Message message, >>> BindingOperationInfo operation, + >>> boolean requestor, ServiceInfo si, + >>> MessageInfo msgInfo) { >>> + message.put(MessageInfo.class, msgInfo); >>> + >>> + Exchange ex = message.getExchange(); >>> + ex.put(BindingOperationInfo.class, operation); >>> + ex.put(OperationInfo.class, operation.getOperationInfo()); >>> + ex.setOneWay(operation.getOperationInfo().isOneWay()); >>> + >>> + //Set standard MessageContext properties required by JAX_WS, but >>> not specific to JAX_WS. + message.put(Message.WSDL_OPERATION, >>> operation.getName()); + >>> + QName serviceQName = si.getName(); >>> + message.put(Message.WSDL_SERVICE, serviceQName); >>> + >>> + QName interfaceQName = si.getInterface().getName(); >>> + message.put(Message.WSDL_INTERFACE, interfaceQName); >>> + >>> + EndpointInfo endpointInfo = >>> ex.get(Endpoint.class).getEndpointInfo(); + QName portQName = >>> endpointInfo.getName(); >>> + message.put(Message.WSDL_PORT, portQName); >>> + >>> + >>> + URI wsdlDescription = endpointInfo.getProperty("URI", >>> URI.class); + if (wsdlDescription == null) { >>> + String address = endpointInfo.getAddress(); >>> + try { >>> + wsdlDescription = new URI(address + "?wsdl"); >>> + } catch (URISyntaxException e) { >>> + //do nothing >>> + } >>> + endpointInfo.setProperty("URI", wsdlDescription); >>> + } >>> + message.put(Message.WSDL_DESCRIPTION, wsdlDescription); >>> >>> + return msgInfo; >>> + } >>> /** >>> * Returns a BindingOperationInfo if the operation is indentified as >>> * a wrapped method, return null if it is not a wrapped method >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInIntercep >>> tor.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/interceptor/BareInInterceptor.java?rev=774058&r1=774057&r2=774058&view= >>> diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInIntercep >>> tor.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInIntercep >>> tor.java Tue May 12 20:08:51 2009 @@ -126,7 +126,7 @@ >>> assert msgInfo.getMessageParts().size() > paramNum; >>> p = msgInfo.getMessageParts().get(paramNum); >>> } else { >>> - p = findMessagePart(exchange, ops, elName, client, >>> paramNum); + p = findMessagePart(exchange, ops, elName, >>> client, paramNum, message); } >>> >>> if (p == null) { >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInIn >>> terceptor.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/interceptor/DocLiteralInInterceptor.java?rev=774058&r1=774057&r2=774058 >>> &view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInIn >>> terceptor.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInIn >>> terceptor.java Tue May 12 20:08:51 2009 @@ -19,8 +19,6 @@ >>> >>> package org.apache.cxf.interceptor; >>> >>> -import java.net.URI; >>> -import java.net.URISyntaxException; >>> import java.util.ArrayList; >>> import java.util.Collection; >>> import java.util.Iterator; >>> @@ -40,7 +38,6 @@ >>> import org.apache.cxf.phase.Phase; >>> import org.apache.cxf.service.model.BindingMessageInfo; >>> import org.apache.cxf.service.model.BindingOperationInfo; >>> -import org.apache.cxf.service.model.EndpointInfo; >>> import org.apache.cxf.service.model.MessageInfo; >>> import org.apache.cxf.service.model.MessagePartInfo; >>> import org.apache.cxf.service.model.OperationInfo; >>> @@ -174,12 +171,13 @@ >>> //no input messagePartInfo >>> return; >>> } >>> + >>> if (msgInfo != null && msgInfo.getMessageParts() != >>> null && msgInfo.getMessageParts().size() > 0) { assert >>> msgInfo.getMessageParts().size() > paramNum; p = >>> msgInfo.getMessageParts().get(paramNum); } else { >>> - p = findMessagePart(exchange, operations, >>> elName, client, paramNum); + p = >>> findMessagePart(exchange, operations, elName, client, paramNum, message); >>> } >>> >>> if (p == null) { >>> @@ -252,44 +250,7 @@ >>> MessageInfo msgInfo = getMessageInfo(message, operation, >>> requestor); return setMessage(message, operation, requestor, si, >>> msgInfo); } >>> - private MessageInfo setMessage(Message message, BindingOperationInfo >>> operation, - boolean requestor, >>> ServiceInfo si, - MessageInfo msgInfo) >>> { >>> - message.put(MessageInfo.class, msgInfo); >>> - >>> - Exchange ex = message.getExchange(); >>> - ex.put(BindingOperationInfo.class, operation); >>> - ex.put(OperationInfo.class, operation.getOperationInfo()); >>> - ex.setOneWay(operation.getOperationInfo().isOneWay()); >>> - >>> - //Set standard MessageContext properties required by JAX_WS, but >>> not specific to JAX_WS. - message.put(Message.WSDL_OPERATION, >>> operation.getName()); - >>> - QName serviceQName = si.getName(); >>> - message.put(Message.WSDL_SERVICE, serviceQName); >>> - >>> - QName interfaceQName = si.getInterface().getName(); >>> - message.put(Message.WSDL_INTERFACE, interfaceQName); >>> - >>> - EndpointInfo endpointInfo = >>> ex.get(Endpoint.class).getEndpointInfo(); - QName portQName = >>> endpointInfo.getName(); >>> - message.put(Message.WSDL_PORT, portQName); >>> >>> - >>> - URI wsdlDescription = endpointInfo.getProperty("URI", >>> URI.class); - if (wsdlDescription == null) { >>> - String address = endpointInfo.getAddress(); >>> - try { >>> - wsdlDescription = new URI(address + "?wsdl"); >>> - } catch (URISyntaxException e) { >>> - //do nothing >>> - } >>> - endpointInfo.setProperty("URI", wsdlDescription); >>> - } >>> - message.put(Message.WSDL_DESCRIPTION, wsdlDescription); >>> - >>> - return msgInfo; >>> - } >>> >>> protected BindingOperationInfo getBindingOperationInfo(Exchange >>> exchange, QName name, boolean client) { >>> >>> Modified: >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInte >>> rceptor.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/c >>> xf/interceptor/URIMappingInterceptor.java?rev=774058&r1=774057&r2=774058&v >>> iew=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInte >>> rceptor.java (original) +++ >>> cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInte >>> rceptor.java Tue May 12 20:08:51 2009 @@ -35,11 +35,15 @@ >>> import org.apache.cxf.common.util.CollectionUtils; >>> import org.apache.cxf.common.util.PrimitiveUtils; >>> import org.apache.cxf.common.util.StringUtils; >>> +import org.apache.cxf.common.util.XMLSchemaQNames; >>> +import org.apache.cxf.endpoint.Endpoint; >>> import org.apache.cxf.frontend.MethodDispatcher; >>> +import org.apache.cxf.message.Exchange; >>> import org.apache.cxf.message.Message; >>> import org.apache.cxf.message.MessageContentsList; >>> import org.apache.cxf.phase.Phase; >>> import org.apache.cxf.service.Service; >>> +import org.apache.cxf.service.model.BindingInfo; >>> import org.apache.cxf.service.model.BindingOperationInfo; >>> import org.apache.cxf.service.model.MessagePartInfo; >>> import org.apache.cxf.service.model.OperationInfo; >>> @@ -74,12 +78,40 @@ >>> if (op == null || opName == null || op.getName() == null >>> >>> || StringUtils.isEmpty(op.getName().getLocalPart()) >>> || !opName.equals(op.getName().getLocalPart())) { >>> >>> - throw new Fault(new >>> org.apache.cxf.common.i18n.Message("NO_OPERATION_PATH", LOG, opName, - >>> >>> message.get(Message.PATH_INFO))); + >>> + if >>> (!Boolean.TRUE.equals(message.getContextualProperty(NO_VALIDATE_PARTS))) >>> { + throw new Fault(new >>> org.apache.cxf.common.i18n.Message("NO_OPERATION_PATH", LOG, opName, + >>> >>> message.get(Message.PATH_INFO))); + } >>> + MessageContentsList params = new MessageContentsList(); >>> + params.add(null); >>> + message.setContent(List.class, params); >>> + if (op == null) { >>> + op = findAnyOp(message.getExchange()); >>> + } >>> + if (op != null) { >>> + message.getExchange().put(BindingOperationInfo.class, >>> op); + } >>> + } else { >>> + message.getExchange().put(BindingOperationInfo.class, op); >>> + MessageContentsList params = getParameters(message, op); >>> + message.setContent(List.class, params); >>> + } >>> + } >>> + >>> + private BindingOperationInfo findAnyOp(Exchange exchange) { >>> + Endpoint ep = exchange.get(Endpoint.class); >>> + BindingInfo service = ep.getEndpointInfo().getBinding(); >>> + >>> + for (BindingOperationInfo b : service.getOperations()) { >>> + if (b.getInput() != null && >>> !b.getInput().getMessageInfo().getMessageParts().isEmpty()) { + >>> MessagePartInfo inf = >>> b.getInput().getMessageInfo().getMessagePart(0); + if >>> (XMLSchemaQNames.XSD_ANY.equals(inf.getTypeQName())) { + >>> return b; >>> + } >>> + } >>> } >>> - message.getExchange().put(BindingOperationInfo.class, op); >>> - MessageContentsList params = getParameters(message, op); >>> - message.setContent(List.class, params); >>> + return null; >>> } >>> >>> private Method getMethod(Message message, BindingOperationInfo >>> operation) { >>> >>> Modified: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchIm >>> pl.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/DispatchImpl.java?rev=774058&r1=774057&r2=774058&view=d >>> iff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchIm >>> pl.java (original) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchIm >>> pl.java Tue May 12 20:08:51 2009 @@ -20,7 +20,6 @@ >>> package org.apache.cxf.jaxws; >>> >>> import java.net.HttpURLConnection; >>> -import java.util.List; >>> import java.util.Map; >>> import java.util.concurrent.Future; >>> import java.util.logging.Logger; >>> @@ -28,17 +27,9 @@ >>> import javax.activation.DataSource; >>> import javax.xml.bind.JAXBContext; >>> import javax.xml.namespace.QName; >>> -import javax.xml.soap.MessageFactory; >>> import javax.xml.soap.SOAPException; >>> import javax.xml.soap.SOAPFault; >>> import javax.xml.soap.SOAPMessage; >>> -import javax.xml.soap.SOAPPart; >>> -import javax.xml.stream.XMLStreamException; >>> -import javax.xml.stream.XMLStreamWriter; >>> -import javax.xml.transform.Source; >>> -import javax.xml.transform.dom.DOMSource; >>> -import javax.xml.transform.sax.SAXSource; >>> -import javax.xml.transform.stream.StreamSource; >>> import javax.xml.ws.AsyncHandler; >>> import javax.xml.ws.Binding; >>> import javax.xml.ws.BindingProvider; >>> @@ -53,27 +44,19 @@ >>> import javax.xml.ws.soap.SOAPBinding; >>> import javax.xml.ws.soap.SOAPFaultException; >>> >>> -import org.w3c.dom.DocumentFragment; >>> -import org.w3c.dom.Node; >>> >>> -import org.apache.cxf.binding.soap.SoapFault; >>> -import org.apache.cxf.binding.soap.SoapMessage; >>> -import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor; >>> import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor; >>> import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor; >>> -import >>> org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.SAAJOutEndingIntercep >>> tor; import org.apache.cxf.common.i18n.Message; >>> import org.apache.cxf.common.logging.LogUtils; >>> import org.apache.cxf.endpoint.Client; >>> import org.apache.cxf.endpoint.ClientCallback; >>> import org.apache.cxf.endpoint.Endpoint; >>> import org.apache.cxf.interceptor.AttachmentOutInterceptor; >>> -import org.apache.cxf.interceptor.Fault; >>> -import org.apache.cxf.io.CachedOutputStream; >>> import org.apache.cxf.jaxws.context.WrappedMessageContext; >>> +import org.apache.cxf.jaxws.interceptors.MessageModeInInterceptor; >>> +import org.apache.cxf.jaxws.interceptors.MessageModeOutInterceptor; >>> import org.apache.cxf.jaxws.support.JaxWsEndpointImpl; >>> -import org.apache.cxf.message.MessageContentsList; >>> -import org.apache.cxf.phase.Phase; >>> import org.apache.cxf.service.model.BindingInfo; >>> import org.apache.cxf.service.model.BindingOperationInfo; >>> import org.apache.cxf.service.model.MessageInfo; >>> @@ -81,11 +64,6 @@ >>> import org.apache.cxf.service.model.MessagePartInfo; >>> import org.apache.cxf.service.model.OperationInfo; >>> import org.apache.cxf.service.model.ServiceInfo; >>> -import org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter; >>> -import org.apache.cxf.staxutils.StaxSource; >>> -import org.apache.cxf.staxutils.StaxUtils; >>> -import org.apache.cxf.staxutils.W3CDOMStreamReader; >>> -import org.apache.cxf.staxutils.W3CDOMStreamWriter; >>> >>> public class DispatchImpl implements Dispatch, BindingProvider { >>> private static final Logger LOG = >>> LogUtils.getL7dLogger(DispatchImpl.class); @@ -120,9 +98,15 @@ >>> } else if (m == Service.Mode.MESSAGE) { >>> SAAJOutInterceptor saajOut = new SAAJOutInterceptor(); >>> client.getOutInterceptors().add(saajOut); >>> - client.getOutInterceptors().add(new >>> MessageModeOutInterceptor(saajOut)); + >>> client.getOutInterceptors(). >>> + add(new MessageModeOutInterceptor(saajOut, >>> + >>> client.getEndpoint() + >>> .getBinding().getBindingInfo().getName())); >>> client.getInInterceptors().add(new SAAJInInterceptor()); - >>> client.getInInterceptors().add(new MessageModeInInterceptor(clazz)); + >>> client.getInInterceptors() >>> + .add(new MessageModeInInterceptor(clazz, >>> + >>> client.getEndpoint() + >>> .getBinding().getBindingInfo().getName())); } >>> } else if (m == Service.Mode.PAYLOAD >>> && binding instanceof SOAPBinding >>> @@ -308,128 +292,4 @@ >>> public Client getClient() { >>> return client; >>> } >>> - >>> - >>> - static class MessageModeOutInterceptor extends >>> AbstractSoapInterceptor { - SAAJOutInterceptor saajOut; >>> - public MessageModeOutInterceptor(SAAJOutInterceptor saajOut) { >>> - super(Phase.PRE_PROTOCOL); >>> - addBefore(SAAJOutInterceptor.class.getName()); >>> - this.saajOut = saajOut; >>> - } >>> - >>> - public void handleMessage(SoapMessage message) throws Fault { >>> - if (!isDispatch(message.getMessage())) { >>> - LOG.info("Dispatch interceptor bailing on unrelated >>> message"); - return; >>> - } >>> - >>> - MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); - Object >>> o = list.get(0); >>> - >>> - SOAPMessage soapMessage = null; >>> - >>> - if (o instanceof SOAPMessage) { >>> - soapMessage = (SOAPMessage)o; >>> - } else { >>> - try { >>> - MessageFactory factory = >>> saajOut.getFactory(message); - soapMessage = >>> factory.createMessage(); >>> - SOAPPart part = soapMessage.getSOAPPart(); >>> - if (o instanceof Source) { >>> - StaxUtils.copy((Source)o, new >>> W3CDOMStreamWriter(part)); - } >>> - } catch (SOAPException e) { >>> - throw new SoapFault("Error creating SOAPMessage", e, >>> - >>> message.getVersion().getSender()); - } catch >>> (XMLStreamException e) { >>> - throw new SoapFault("Error creating SOAPMessage", e, >>> - >>> message.getVersion().getSender()); - } >>> - } >>> - message.setContent(SOAPMessage.class, soapMessage); >>> - >>> - if >>> (!message.containsKey(SAAJOutInterceptor.ORIGINAL_XML_WRITER)) { - >>> XMLStreamWriter origWriter = >>> message.getContent(XMLStreamWriter.class); - >>> message.put(SAAJOutInterceptor.ORIGINAL_XML_WRITER, origWriter); - >>> } >>> - W3CDOMStreamWriter writer = new >>> OverlayW3CDOMStreamWriter(soapMessage.getSOAPPart()); - // >>> Replace stax writer with DomStreamWriter >>> - message.setContent(XMLStreamWriter.class, writer); >>> - message.setContent(SOAPMessage.class, soapMessage); >>> - >>> - DocumentFragment frag = >>> soapMessage.getSOAPPart().createDocumentFragment(); - try { >>> - Node body = soapMessage.getSOAPBody(); >>> - Node nd = body.getFirstChild(); >>> - while (nd != null) { >>> - body.removeChild(nd); >>> - frag.appendChild(nd); >>> - nd = soapMessage.getSOAPBody().getFirstChild(); >>> - list.set(0, frag); >>> - } >>> - } catch (Exception ex) { >>> - throw new Fault(ex); >>> - } >>> - >>> - >>> - // Add a final interceptor to write the message >>> - >>> message.getInterceptorChain().add(SAAJOutEndingInterceptor.INSTANCE); - >>> } >>> - >>> - } >>> - >>> - static class MessageModeInInterceptor extends >>> AbstractSoapInterceptor { - Class type; >>> - public MessageModeInInterceptor(Class c) { >>> - super(Phase.POST_LOGICAL); >>> - type = c; >>> - } >>> - >>> - public void handleMessage(SoapMessage message) throws Fault { >>> - if (!isDispatch(message.getMessage())) { >>> - LOG.info("Dispatch interceptor bailing on unrelated >>> message"); - return; >>> - } >>> - >>> - SOAPMessage m = message.getContent(SOAPMessage.class); >>> - MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); - if >>> (list == null) { >>> - list = new MessageContentsList(); >>> - message.setContent(List.class, list); >>> - } >>> - Object o = m; >>> - >>> - if (StreamSource.class.isAssignableFrom(type)) { >>> - try { >>> - CachedOutputStream out = new CachedOutputStream(); >>> - try { >>> - XMLStreamWriter xsw = >>> StaxUtils.createXMLStreamWriter(out); - >>> StaxUtils.copy(new DOMSource(m.getSOAPPart()), xsw); - >>> xsw.close(); >>> - o = new StreamSource(out.getInputStream()); >>> - } finally { >>> - out.close(); >>> - } >>> - } catch (Exception e) { >>> - throw new Fault(e); >>> - } >>> - } else if (SAXSource.class.isAssignableFrom(type)) { >>> - o = new StaxSource(new >>> W3CDOMStreamReader(m.getSOAPPart())); - } else if >>> (Source.class.isAssignableFrom(type)) { >>> - o = new DOMSource(m.getSOAPPart()); >>> - } >>> - >>> - list.set(0, o); >>> - } >>> - } >>> - >>> - protected static boolean isDispatch(org.apache.cxf.message.Message >>> message) { - BindingOperationInfo boi = >>> message.getExchange().get(BindingOperationInfo.class); - return >>> boi != null >>> - && DISPATCH_NS.equals(boi.getName().getNamespaceURI()) >>> - && (INVOKE_NAME.equals(boi.getName().getLocalPart()) >>> - || >>> INVOKE_ONEWAY_NAME.equals(boi.getName().getLocalPart())); - } >>> - >>> } >>> >>> Modified: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServe >>> rFactoryBean.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/JaxWsServerFactoryBean.java?rev=774058&r1=774057&r2=774 >>> 058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServe >>> rFactoryBean.java (original) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServe >>> rFactoryBean.java Tue May 12 20:08:51 2009 @@ -28,7 +28,6 @@ >>> import javax.xml.ws.handler.Handler; >>> import javax.xml.ws.soap.SOAPBinding; >>> >>> -import org.apache.cxf.binding.AbstractBindingFactory; >>> import org.apache.cxf.binding.soap.Soap12; >>> import org.apache.cxf.common.injection.ResourceInjector; >>> import org.apache.cxf.endpoint.Endpoint; >>> @@ -158,7 +157,7 @@ >>> BindingInfo bindingInfo = super.createBindingInfo(); >>> >>> if (implInfo.isWebServiceProvider()) { >>> - >>> bindingInfo.setProperty(AbstractBindingFactory.DATABINDING_DISABLED, >>> Boolean.TRUE); + >>> bindingInfo.getService().setProperty("soap.force.doclit.bare", >>> Boolean.TRUE); } >>> >>> return bindingInfo; >>> >>> Added: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeInInterceptor.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/interceptors/MessageModeInInterceptor.java?rev=774058&v >>> iew=auto >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeInInterceptor.java (added) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeInInterceptor.java Tue May 12 20:08:51 2009 @@ -0,0 +1,253 >>> @@ >>> +/** >>> + * Licensed to the Apache Software Foundation (ASF) under one >>> + * or more contributor license agreements. See the NOTICE file >>> + * distributed with this work for additional information >>> + * regarding copyright ownership. The ASF licenses this file >>> + * to you under the Apache License, Version 2.0 (the >>> + * "License"); you may not use this file except in compliance >>> + * with the License. You may obtain a copy of the License at >>> + * >>> + * http://www.apache.org/licenses/LICENSE-2.0 >>> + * >>> + * Unless required by applicable law or agreed to in writing, >>> + * software distributed under the License is distributed on an >>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >>> + * KIND, either express or implied. See the License for the >>> + * specific language governing permissions and limitations >>> + * under the License. >>> + */ >>> + >>> +package org.apache.cxf.jaxws.interceptors; >>> + >>> +import java.io.IOException; >>> +import java.io.InputStream; >>> +import java.io.OutputStream; >>> +import java.io.OutputStreamWriter; >>> +import java.io.Writer; >>> +import java.util.Iterator; >>> +import java.util.List; >>> + >>> +import javax.activation.DataSource; >>> +import javax.xml.namespace.QName; >>> +import javax.xml.soap.SOAPMessage; >>> +import javax.xml.stream.XMLStreamWriter; >>> +import javax.xml.transform.Source; >>> +import javax.xml.transform.dom.DOMSource; >>> +import javax.xml.transform.sax.SAXSource; >>> +import javax.xml.transform.stream.StreamSource; >>> + >>> +import org.apache.cxf.attachment.AttachmentUtil; >>> +import org.apache.cxf.helpers.LoadingByteArrayOutputStream; >>> +import org.apache.cxf.interceptor.Fault; >>> +import org.apache.cxf.io.CachedOutputStream; >>> +import org.apache.cxf.message.Attachment; >>> +import org.apache.cxf.message.Message; >>> +import org.apache.cxf.message.MessageContentsList; >>> +import org.apache.cxf.phase.AbstractPhaseInterceptor; >>> +import org.apache.cxf.phase.Phase; >>> +import org.apache.cxf.service.model.BindingOperationInfo; >>> +import org.apache.cxf.staxutils.StaxSource; >>> +import org.apache.cxf.staxutils.StaxUtils; >>> +import org.apache.cxf.staxutils.W3CDOMStreamReader; >>> + >>> +public class MessageModeInInterceptor extends >>> AbstractPhaseInterceptor { + Class type; >>> + QName bindingName; >>> + >>> + Class soapMsgClass; >>> + >>> + public MessageModeInInterceptor(Class c, QName bName) { >>> + super(Phase.POST_LOGICAL); >>> + bindingName = bName; >>> + type = c; >>> + try { >>> + soapMsgClass = Class.forName("javax.xml.soap.SOAPMessage"); >>> + } catch (Throwable t) { >>> + soapMsgClass = null; >>> + } >>> + } >>> + >>> + public void handleMessage(Message message) throws Fault { >>> + if >>> (!bindingName.equals(message.getExchange().get(BindingOperationInfo.class >>> ) + .getBinding().getName())) { >>> + return; >>> + } >>> + Object o = message.getContent(soapMsgClass); >>> + if (o != null) { >>> + doFromSoapMessage(message, o); >>> + } else if (DataSource.class.isAssignableFrom(type)) { >>> + doDataSource(message); >>> + } >>> + >>> + } >>> + >>> + private void doDataSource(final Message message) { >>> + MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); + >>> //reconstitute all the parts into a Mime data source >>> + if (message.getAttachments() != null && >>> !message.getAttachments().isEmpty() + && list != null >>> + && !list.isEmpty() && list.get(0) instanceof DataSource) { >>> + list.set(0, new MultiPartDataSource(message, >>> (DataSource)list.get(0))); + } >>> + } >>> + >>> + private void doFromSoapMessage(Message message, Object sm) { >>> + SOAPMessage m = (SOAPMessage)sm; >>> + MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); + if (list == >>> null) { >>> + list = new MessageContentsList(); >>> + message.setContent(List.class, list); >>> + } >>> + Object o = m; >>> + >>> + if (StreamSource.class.isAssignableFrom(type)) { >>> + try { >>> + CachedOutputStream out = new CachedOutputStream(); >>> + try { >>> + XMLStreamWriter xsw = >>> StaxUtils.createXMLStreamWriter(out); + >>> StaxUtils.copy(new DOMSource(m.getSOAPPart()), xsw); + >>> xsw.close(); >>> + o = new StreamSource(out.getInputStream()); >>> + } finally { >>> + out.close(); >>> + } >>> + } catch (Exception e) { >>> + throw new Fault(e); >>> + } >>> + } else if (SAXSource.class.isAssignableFrom(type)) { >>> + o = new StaxSource(new W3CDOMStreamReader(m.getSOAPPart())); >>> + } else if (Source.class.isAssignableFrom(type)) { >>> + o = new DOMSource(m.getSOAPPart()); >>> + } >>> + list.set(0, o); >>> + } >>> + >>> + private static class MultiPartDataSource implements DataSource { >>> + final Iterator atts; >>> + final String contentType; >>> + final String boundary; >>> + final String start; >>> + >>> + final LoadingByteArrayOutputStream bout = new >>> LoadingByteArrayOutputStream(); + Writer writer; >>> + >>> + DataSource rootPart; >>> + InputStream current; >>> + boolean writingHeaders; >>> + Attachment att; >>> + >>> + public MultiPartDataSource(Message message, DataSource root) { >>> + atts = message.getAttachments().iterator(); >>> + String s = (String)message.get(Message.CONTENT_TYPE); >>> + boundary = findBoundary(s); >>> + start = findStart(s); >>> + if (!s.contains(boundary)) { >>> + s += "; boundary=\"" + boundary + "\""; >>> + } >>> + contentType = s; >>> + rootPart = root; >>> + try { >>> + writer = new OutputStreamWriter(bout, "ASCII"); >>> + writer.append("Content-Type: >>> ").append(contentType).append("\r\n\r\n"); + >>> writer.flush(); >>> + current = bout.createInputStream(); >>> + } catch (Exception e) { >>> + //nothing >>> + } >>> + } >>> + >>> + public String getContentType() { >>> + return contentType; >>> + } >>> + public InputStream getInputStream() throws IOException { >>> + return new InputStream() { >>> + public int read() throws IOException { >>> + int i = current.read(); >>> + if (i == -1) { >>> + nextCurrent(); >>> + i = current.read(); >>> + } >>> + return i; >>> + } >>> + }; >>> + } >>> + private void nextCurrent() throws IOException { >>> + if (rootPart != null) { >>> + if (writingHeaders) { >>> + writingHeaders = false; >>> + current = rootPart.getInputStream(); >>> + rootPart = null; >>> + } else { >>> + writingHeaders = true; >>> + bout.reset(); >>> + writer.append("--").append(boundary).append("\r\n"); >>> + writer.append("Content-Type: >>> ").append(rootPart.getContentType()).append("\r\n"); + >>> writer.append("Content-ID: <").append(start).append(">\r\n\r\n"); + >>> writer.flush(); >>> + current = bout.createInputStream(); >>> + } >>> + } else { >>> + if (writingHeaders) { >>> + writingHeaders = false; >>> + current = att.getDataHandler().getInputStream(); >>> + } else if (atts.hasNext()) { >>> + att = atts.next(); >>> + writingHeaders = true; >>> + bout.reset(); >>> + writer.append("\r\n"); >>> + writer.append("--").append(boundary).append("\r\n"); >>> + Iterator heads = att.getHeaderNames(); >>> + while (heads.hasNext()) { >>> + String s = heads.next(); >>> + writer.append(s).append(": >>> ").append(att.getHeader(s)).append("\r\n"); + } >>> + writer.append("\r\n"); >>> + writer.flush(); >>> + current = bout.createInputStream(); >>> + } >>> + } >>> + } >>> + public String getName() { >>> + return null; >>> + } >>> + public OutputStream getOutputStream() throws IOException { >>> + return null; >>> + } >>> + >>> + private String findStart(String ct) { >>> + int idx = ct.indexOf("start="); >>> + if (idx == -1) { >>> + return "root"; >>> + } >>> + ct = ct.substring(idx + 6); >>> + if (ct.charAt(0) == '"') { >>> + ct = ct.substring(1); >>> + idx = ct.indexOf('"'); >>> + return ct.substring(0, idx); >>> + } >>> + idx = ct.indexOf(';'); >>> + if (idx == -1) { >>> + return ct; >>> + } >>> + return ct.substring(0, idx); >>> + } >>> + >>> + private String findBoundary(String ct) { >>> + int idx = ct.indexOf("boundary="); >>> + if (idx == -1) { >>> + return AttachmentUtil.getUniqueBoundaryValue(); >>> + } >>> + ct = ct.substring(idx + 9); >>> + if (ct.charAt(0) == '"') { >>> + ct = ct.substring(1); >>> + idx = ct.indexOf('"'); >>> + return ct.substring(0, idx); >>> + } >>> + idx = ct.indexOf(';'); >>> + if (idx == -1) { >>> + return ct; >>> + } >>> + return ct.substring(0, idx); >>> + } >>> + } >>> +} >>> \ No newline at end of file >>> >>> Propchange: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeInInterceptor.java >>> ------------------------------------------------------------------------- >>> ----- svn:eol-style = native >>> >>> Propchange: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeInInterceptor.java >>> ------------------------------------------------------------------------- >>> ----- svn:keywords = Rev Date >>> >>> Added: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeOutInterceptor.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/interceptors/MessageModeOutInterceptor.java?rev=774058& >>> view=auto >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeOutInterceptor.java (added) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeOutInterceptor.java Tue May 12 20:08:51 2009 @@ -0,0 +1,205 >>> @@ >>> +/** >>> + * Licensed to the Apache Software Foundation (ASF) under one >>> + * or more contributor license agreements. See the NOTICE file >>> + * distributed with this work for additional information >>> + * regarding copyright ownership. The ASF licenses this file >>> + * to you under the Apache License, Version 2.0 (the >>> + * "License"); you may not use this file except in compliance >>> + * with the License. You may obtain a copy of the License at >>> + * >>> + * http://www.apache.org/licenses/LICENSE-2.0 >>> + * >>> + * Unless required by applicable law or agreed to in writing, >>> + * software distributed under the License is distributed on an >>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >>> + * KIND, either express or implied. See the License for the >>> + * specific language governing permissions and limitations >>> + * under the License. >>> + */ >>> + >>> +package org.apache.cxf.jaxws.interceptors; >>> + >>> +import java.io.IOException; >>> +import java.io.InputStream; >>> +import java.io.OutputStream; >>> +import java.util.List; >>> + >>> +import javax.activation.DataSource; >>> +import javax.xml.namespace.QName; >>> +import javax.xml.soap.MessageFactory; >>> +import javax.xml.soap.SOAPException; >>> +import javax.xml.soap.SOAPMessage; >>> +import javax.xml.soap.SOAPPart; >>> +import javax.xml.stream.XMLStreamException; >>> +import javax.xml.stream.XMLStreamWriter; >>> +import javax.xml.transform.Source; >>> + >>> +import org.w3c.dom.DocumentFragment; >>> +import org.w3c.dom.Node; >>> + >>> +import org.apache.cxf.attachment.AttachmentDeserializer; >>> +import org.apache.cxf.binding.soap.SoapFault; >>> +import org.apache.cxf.binding.soap.SoapMessage; >>> +import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor; >>> +import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor; >>> +import >>> org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.SAAJOutEndingIntercep >>> tor; +import org.apache.cxf.interceptor.Fault; >>> +import org.apache.cxf.message.Message; >>> +import org.apache.cxf.message.MessageContentsList; >>> +import org.apache.cxf.message.MessageImpl; >>> +import org.apache.cxf.phase.AbstractPhaseInterceptor; >>> +import org.apache.cxf.phase.Phase; >>> +import org.apache.cxf.service.model.BindingOperationInfo; >>> +import org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter; >>> +import org.apache.cxf.staxutils.StaxUtils; >>> +import org.apache.cxf.staxutils.W3CDOMStreamWriter; >>> + >>> +public class MessageModeOutInterceptor extends >>> AbstractPhaseInterceptor { + >>> MessageModeOutInterceptorInternal internal; >>> + SAAJOutInterceptor saajOut; >>> + Class type; >>> + QName bindingName; >>> + >>> + public MessageModeOutInterceptor(SAAJOutInterceptor saajOut, QName >>> bname) { + super(Phase.PREPARE_SEND); >>> + this.saajOut = saajOut; >>> + this.bindingName = bname; >>> + internal = new MessageModeOutInterceptorInternal(); >>> + } >>> + public MessageModeOutInterceptor(Class t, QName bname) { >>> + super(Phase.PREPARE_SEND); >>> + type = t; >>> + this.bindingName = bname; >>> + } >>> + public void handleMessage(Message message) throws Fault { >>> + if >>> (!bindingName.equals(message.getExchange().get(BindingOperationInfo.class >>> ) + .getBinding().getName())) { >>> + return; >>> + } >>> + if (saajOut != null) { >>> + doSoap(message); >>> + } else if (DataSource.class.isAssignableFrom(type)) { >>> + //datasource stuff, must check if multi-source >>> + MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); + >>> DataSource ds = (DataSource)list.get(0); >>> + String ct = ds.getContentType(); >>> + if (ct.toLowerCase().contains("multipart/related")) { >>> + Message msg = new MessageImpl(); >>> + msg.setExchange(message.getExchange()); >>> + msg.put(Message.CONTENT_TYPE, ct); >>> + try { >>> + msg.setContent(InputStream.class, >>> ds.getInputStream()); + AttachmentDeserializer deser = >>> new AttachmentDeserializer(msg); + >>> deser.initializeAttachments(); >>> + } catch (IOException ex) { >>> + throw new Fault(ex); >>> + } >>> + message.setAttachments(msg.getAttachments()); >>> + final InputStream in = >>> msg.getContent(InputStream.class); + final String ct2 = >>> (String)msg.get(Message.CONTENT_TYPE); + list.set(0, new >>> DataSource() { >>> + >>> + public String getContentType() { >>> + return ct2; >>> + } >>> + >>> + public InputStream getInputStream() throws >>> IOException { + return in; >>> + } >>> + >>> + public String getName() { >>> + return ct2; >>> + } >>> + >>> + public OutputStream getOutputStream() throws >>> IOException { + // TODO Auto-generated method stub >>> + return null; >>> + } >>> + >>> + }); >>> + } >>> + } >>> + >>> + } >>> + >>> + >>> + private void doSoap(Message message) { >>> + MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); + Object o = >>> list.get(0); >>> + if (o instanceof SOAPMessage) { >>> + SOAPMessage soapMessage = (SOAPMessage)o; >>> + if (soapMessage.countAttachments() > 0) { >>> + message.put("write.attachments", Boolean.TRUE); >>> + } >>> + } >>> + message.getInterceptorChain().add(internal); >>> + } >>> + >>> + private class MessageModeOutInterceptorInternal extends >>> AbstractSoapInterceptor { + MessageModeOutInterceptorInternal() { >>> + super(Phase.PRE_PROTOCOL); >>> + addBefore(SAAJOutInterceptor.class.getName()); >>> + } >>> + >>> + public void handleMessage(SoapMessage message) throws Fault { >>> + MessageContentsList list = >>> (MessageContentsList)message.getContent(List.class); + Object >>> o = list.get(0); >>> + SOAPMessage soapMessage = null; >>> + >>> + if (o instanceof SOAPMessage) { >>> + soapMessage = (SOAPMessage)o; >>> + if (soapMessage.countAttachments() > 0) { >>> + message.put("write.attachments", Boolean.TRUE); >>> + } >>> + } else { >>> + try { >>> + MessageFactory factory = >>> saajOut.getFactory(message); + soapMessage = >>> factory.createMessage(); >>> + SOAPPart part = soapMessage.getSOAPPart(); >>> + if (o instanceof Source) { >>> + StaxUtils.copy((Source)o, new >>> W3CDOMStreamWriter(part)); + } >>> + } catch (SOAPException e) { >>> + throw new SoapFault("Error creating SOAPMessage", e, >>> + >>> message.getVersion().getSender()); + } catch >>> (XMLStreamException e) { >>> + throw new SoapFault("Error creating SOAPMessage", e, >>> + >>> message.getVersion().getSender()); + } >>> + } >>> + message.setContent(SOAPMessage.class, soapMessage); >>> + >>> + if >>> (!message.containsKey(SAAJOutInterceptor.ORIGINAL_XML_WRITER)) { + >>> XMLStreamWriter origWriter = >>> message.getContent(XMLStreamWriter.class); + >>> message.put(SAAJOutInterceptor.ORIGINAL_XML_WRITER, origWriter); + >>> } >>> + W3CDOMStreamWriter writer = new >>> OverlayW3CDOMStreamWriter(soapMessage.getSOAPPart()); + // >>> Replace stax writer with DomStreamWriter >>> + message.setContent(XMLStreamWriter.class, writer); >>> + message.setContent(SOAPMessage.class, soapMessage); >>> + >>> + DocumentFragment frag = >>> soapMessage.getSOAPPart().createDocumentFragment(); + try { >>> + Node body = soapMessage.getSOAPBody(); >>> + Node nd = body.getFirstChild(); >>> + while (nd != null) { >>> + body.removeChild(nd); >>> + frag.appendChild(nd); >>> + nd = soapMessage.getSOAPBody().getFirstChild(); >>> + } >>> + list.set(0, frag); >>> + } catch (Exception ex) { >>> + throw new Fault(ex); >>> + } >>> + BindingOperationInfo bop = >>> message.getExchange().get(BindingOperationInfo.class); + if >>> (bop != null && bop.isUnwrapped()) { >>> + bop = bop.getWrappedOperation(); >>> + message.getExchange().put(BindingOperationInfo.class, >>> bop); + } >>> + >>> + // Add a final interceptor to write the message >>> + >>> message.getInterceptorChain().add(SAAJOutEndingInterceptor.INSTANCE); + >>> } >>> + } >>> + >>> +} >>> \ No newline at end of file >>> >>> Propchange: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeOutInterceptor.java >>> ------------------------------------------------------------------------- >>> ----- svn:eol-style = native >>> >>> Propchange: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/intercepto >>> rs/MessageModeOutInterceptor.java >>> ------------------------------------------------------------------------- >>> ----- svn:keywords = Rev Date >>> >>> Modified: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsEndpointImpl.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?rev=774058&r1=774057&r2= >>> 774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsEndpointImpl.java (original) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsEndpointImpl.java Tue May 12 20:08:51 2009 @@ -26,6 +26,7 @@ >>> import javax.wsdl.extensions.ExtensibilityElement; >>> import javax.wsdl.extensions.ExtensionRegistry; >>> import javax.xml.ws.Binding; >>> +import javax.xml.ws.Service.Mode; >>> import javax.xml.ws.WebServiceFeature; >>> import javax.xml.ws.soap.Addressing; >>> import javax.xml.ws.soap.AddressingFeature; >>> @@ -34,30 +35,32 @@ >>> >>> import org.apache.cxf.Bus; >>> import org.apache.cxf.binding.soap.SoapBinding; >>> +import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor; >>> +import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor; >>> import org.apache.cxf.binding.xml.XMLBinding; >>> import org.apache.cxf.endpoint.EndpointException; >>> import org.apache.cxf.endpoint.EndpointImpl; >>> import org.apache.cxf.feature.AbstractFeature; >>> +import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor; >>> import org.apache.cxf.interceptor.Interceptor; >>> import org.apache.cxf.jaxws.binding.DefaultBindingImpl; >>> import org.apache.cxf.jaxws.binding.http.HTTPBindingImpl; >>> import org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl; >>> -import >>> org.apache.cxf.jaxws.handler.logical.DispatchLogicalHandlerInterceptor; >>> import >>> org.apache.cxf.jaxws.handler.logical.LogicalHandlerFaultInInterceptor; >>> import >>> org.apache.cxf.jaxws.handler.logical.LogicalHandlerFaultOutInterceptor; >>> import org.apache.cxf.jaxws.handler.logical.LogicalHandlerInInterceptor; >>> import org.apache.cxf.jaxws.handler.logical.LogicalHandlerOutInterceptor; >>> -import org.apache.cxf.jaxws.handler.soap.DispatchSOAPHandlerInterceptor; >>> import org.apache.cxf.jaxws.handler.soap.SOAPHandlerFaultInInterceptor; >>> import org.apache.cxf.jaxws.handler.soap.SOAPHandlerFaultOutInterceptor; >>> import org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor; import >>> org.apache.cxf.jaxws.interceptors.HolderInInterceptor; >>> import org.apache.cxf.jaxws.interceptors.HolderOutInterceptor; >>> +import org.apache.cxf.jaxws.interceptors.MessageModeInInterceptor; >>> +import org.apache.cxf.jaxws.interceptors.MessageModeOutInterceptor; >>> import org.apache.cxf.jaxws.interceptors.SwAInInterceptor; >>> import org.apache.cxf.jaxws.interceptors.SwAOutInterceptor; >>> import org.apache.cxf.jaxws.interceptors.WrapperClassInInterceptor; >>> import org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor; >>> -import org.apache.cxf.phase.Phase; >>> import org.apache.cxf.service.Service; >>> import org.apache.cxf.service.model.BindingInfo; >>> import org.apache.cxf.service.model.EndpointInfo; >>> @@ -104,39 +107,50 @@ >>> >>> List in = super.getInInterceptors(); >>> List out = super.getOutInterceptors(); >>> + >>> + boolean isProvider = implInfo != null && >>> implInfo.isWebServiceProvider(); + Class clazz = implInfo != >>> null && isProvider ? implInfo.getProviderParameterType() : null; + >>> Mode mode = implInfo != null && isProvider ? implInfo.getServiceMode() : >>> null; >>> >>> - if (implInfo != null && implInfo.isWebServiceProvider()) { >>> - DispatchLogicalHandlerInterceptor slhi = new >>> DispatchLogicalHandlerInterceptor(jaxwsBinding, - >>> Phase.USER_LOGICAL); >>> - in.add(slhi); >>> - out.add(new >>> DispatchLogicalHandlerInterceptor(jaxwsBinding)); - >>> - if (getBinding() instanceof SoapBinding) { >>> - in.add(new >>> DispatchSOAPHandlerInterceptor(jaxwsBinding)); - >>> out.add(new DispatchSOAPHandlerInterceptor(jaxwsBinding)); - } >>> - } else { >>> - // Inbound chain >>> - in.add(new LogicalHandlerInInterceptor(jaxwsBinding)); >>> + if (isProvider) { >>> + s.put(AbstractInDatabindingInterceptor.NO_VALIDATE_PARTS, >>> Boolean.TRUE); + } >>> + >>> + // Inbound chain >>> + in.add(new LogicalHandlerInInterceptor(jaxwsBinding)); >>> + if (!isProvider) { >>> in.add(new WrapperClassInInterceptor()); >>> in.add(new HolderInInterceptor()); >>> - if (getBinding() instanceof SoapBinding) { >>> - in.add(new SOAPHandlerInterceptor(jaxwsBinding)); >>> - in.add(new SwAInInterceptor()); >>> - getOutInterceptors().add(new SwAOutInterceptor()); >>> - } else { >>> - // TODO: what for non soap bindings? >>> + } >>> + if (getBinding() instanceof SoapBinding) { >>> + in.add(new SOAPHandlerInterceptor(jaxwsBinding)); >>> + in.add(new SwAInInterceptor()); >>> + getOutInterceptors().add(new SwAOutInterceptor()); >>> + if (isProvider && mode == Mode.MESSAGE) { >>> + in.add(new SAAJInInterceptor()); >>> } >>> + } >>> + if (isProvider && mode == Mode.MESSAGE) { >>> + in.add(new MessageModeInInterceptor(clazz, >>> getBinding().getBindingInfo().getName())); + } >>> >>> - // Outbound chain >>> - out.add(new LogicalHandlerOutInterceptor(jaxwsBinding)); >>> + // Outbound chain >>> + out.add(new LogicalHandlerOutInterceptor(jaxwsBinding)); >>> + if (!isProvider) { >>> out.add(new WrapperClassOutInterceptor()); >>> out.add(new HolderOutInterceptor()); >>> - if (getBinding() instanceof SoapBinding) { >>> - out.add(new SOAPHandlerInterceptor(jaxwsBinding)); >>> + } >>> + if (getBinding() instanceof SoapBinding) { >>> + out.add(new SOAPHandlerInterceptor(jaxwsBinding)); >>> + if (mode == Mode.MESSAGE) { >>> + SAAJOutInterceptor saajOut = new SAAJOutInterceptor(); >>> + out.add(saajOut); >>> + out.add(new MessageModeOutInterceptor(saajOut, >>> + >>> getBinding().getBindingInfo().getName())); } >>> + } else if (isProvider) { >>> + out.add(new MessageModeOutInterceptor(clazz, >>> getBinding().getBindingInfo().getName())); } >>> - >>> >>> //Outbound fault chain >>> List outFault = super.getOutFaultInterceptors(); >>> @@ -152,6 +166,7 @@ >>> inFault.add(new >>> SOAPHandlerFaultInInterceptor(jaxwsBinding)); } >>> >>> + >>> if (ei != null) { >>> if (!isFromWsdl) { >>> buildWsdlExtensibilities(ei.getBinding()); >>> >>> Modified: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsServiceFactoryBean.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?rev=774058&r1=7740 >>> 57&r2=774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsServiceFactoryBean.java (original) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/Ja >>> xWsServiceFactoryBean.java Tue May 12 20:08:51 2009 @@ -41,7 +41,6 @@ >>> import javax.xml.ws.BindingType; >>> import javax.xml.ws.FaultAction; >>> import javax.xml.ws.Service; >>> -import javax.xml.ws.Service.Mode; >>> import javax.xml.ws.WebFault; >>> import javax.xml.ws.WebServiceFeature; >>> import javax.xml.ws.soap.Addressing; >>> @@ -50,11 +49,11 @@ >>> import javax.xml.ws.soap.MTOMFeature; >>> import javax.xml.ws.soap.SOAPBinding; >>> >>> -import org.apache.cxf.binding.AbstractBindingFactory; >>> import org.apache.cxf.common.classloader.ClassLoaderUtils; >>> import org.apache.cxf.common.logging.LogUtils; >>> import org.apache.cxf.common.util.PackageUtils; >>> import org.apache.cxf.common.util.StringUtils; >>> +import org.apache.cxf.common.util.XMLSchemaQNames; >>> import org.apache.cxf.databinding.source.SourceDataBinding; >>> import org.apache.cxf.endpoint.Endpoint; >>> import org.apache.cxf.endpoint.EndpointException; >>> @@ -63,17 +62,17 @@ >>> import org.apache.cxf.jaxws.JAXWSMethodDispatcher; >>> import org.apache.cxf.jaxws.JAXWSProviderMethodDispatcher; >>> import org.apache.cxf.jaxws.WrapperClassGenerator; >>> -import >>> org.apache.cxf.jaxws.interceptors.DispatchInDatabindingInterceptor; >>> -import >>> org.apache.cxf.jaxws.interceptors.DispatchOutDatabindingInterceptor; >>> import org.apache.cxf.jaxws.interceptors.WebFaultOutInterceptor; import >>> org.apache.cxf.service.factory.AbstractServiceConfiguration; import >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean; import >>> org.apache.cxf.service.factory.ServiceConstructionException; import >>> org.apache.cxf.service.model.BindingInfo; >>> +import org.apache.cxf.service.model.BindingOperationInfo; >>> import org.apache.cxf.service.model.EndpointInfo; >>> import org.apache.cxf.service.model.FaultInfo; >>> import org.apache.cxf.service.model.InterfaceInfo; >>> import org.apache.cxf.service.model.MessageInfo; >>> +import org.apache.cxf.service.model.MessagePartInfo; >>> import org.apache.cxf.service.model.OperationInfo; >>> import org.apache.cxf.service.model.ServiceInfo; >>> import org.apache.cxf.ws.addressing.JAXWSAConstants; >>> @@ -121,7 +120,7 @@ >>> this.schemaLocationMapping.put(JAXWSAConstants.NS_WSA, >>> JAXWSAConstants.WSA_XSD); >>> } >>> - >>> + >>> private void loadWSFeatureAnnotation(Class serviceClass, Class >>> implementorClass) { List features = new >>> ArrayList(); MTOM mtom = >>> implInfo.getImplementorClass().getAnnotation(MTOM.class); @@ -180,19 >>> +179,6 @@ >>> } >>> >>> @Override >>> - protected void initializeDefaultInterceptors() { >>> - super.initializeDefaultInterceptors(); >>> - >>> - if (implInfo.isWebServiceProvider()) { >>> - Class type = implInfo.getProviderParameterType(); >>> - Mode mode = implInfo.getServiceMode(); >>> - >>> - getService().getInInterceptors().add(new >>> DispatchInDatabindingInterceptor(type, mode)); - >>> getService().getOutInterceptors().add(new >>> DispatchOutDatabindingInterceptor(mode)); - } >>> - } >>> - >>> - @Override >>> protected void initializeFaultInterceptors() { >>> getService().getOutFaultInterceptors().add(new >>> WebFaultOutInterceptor()); } >>> @@ -244,7 +230,6 @@ >>> } >>> } >>> >>> - >>> @Override >>> protected void initializeWSDLOperations() { >>> if (implInfo.isWebServiceProvider()) { >>> @@ -254,7 +239,6 @@ >>> } >>> } >>> >>> - >>> protected void initializeWSDLOperationsForProvider() { >>> Type[] genericInterfaces = >>> getServiceClass().getGenericInterfaces(); ParameterizedType pt = >>> (ParameterizedType)genericInterfaces[0]; @@ -280,14 +264,65 @@ >>> >>> try { >>> Method invoke = getServiceClass().getMethod("invoke", c); >>> - >>> + QName catchAll = new >>> QName("http://cxf.apache.org/jaxws/provider", "invoke"); + >>> // Bind every operation to the invoke method. >>> for (ServiceInfo si : getService().getServiceInfos()) { >>> - for (OperationInfo o : >>> si.getInterface().getOperations()) { - >>> getMethodDispatcher().bind(o, invoke); >>> - } >>> - for (BindingInfo bi : si.getBindings()) { >>> - >>> bi.setProperty(AbstractBindingFactory.DATABINDING_DISABLED, >>> Boolean.TRUE); + si.setProperty("soap.force.doclit.bare", >>> Boolean.TRUE); + for (BindingInfo bind : si.getBindings()) >>> { >>> + for (BindingOperationInfo bop : >>> bind.getOperations()) { + OperationInfo o = >>> bop.getOperationInfo(); + if (o.getInput() != >>> null) { >>> + if >>> (o.getInput().getMessageParts().isEmpty()) { + >>> MessagePartInfo inf = o.getInput().addMessagePart(o.getName()); + >>> inf.setConcreteName(o.getName()); + >>> >>> bop.getInput().setMessageParts(o.getInput().getMessageParts()); + >>> } >>> + for (MessagePartInfo inf : >>> o.getInput().getMessageParts()) { + >>> inf.setTypeClass(c); >>> + } >>> + } >>> + if (o.getOutput() != null) { >>> + if >>> (o.getOutput().getMessageParts().isEmpty()) { + >>> MessagePartInfo inf = o.getOutput().addMessagePart(o.getName()); + >>> inf.setConcreteName(new >>> QName(o.getName().getNamespaceURI(), + >>> o.getName().getLocalPart() + "Response")); + >>> >>> bop.getOutput().setMessageParts(o.getOutput().getMessageParts()); + >>> } >>> + for (MessagePartInfo inf : >>> o.getOutput().getMessageParts()) { + >>> inf.setTypeClass(c); >>> + } >>> + } >>> + getMethodDispatcher().bind(o, invoke); >>> + } >>> + BindingOperationInfo bop = >>> bind.getOperation(catchAll); + if (bop == null) { >>> + OperationInfo op = >>> bind.getInterface().getOperation(catchAll); + if >>> (op == null) { >>> + op = >>> bind.getInterface().addOperation(catchAll); + >>> String name = catchAll.getLocalPart(); + >>> MessageInfo mInfo = op.createMessage(new >>> QName(catchAll.getNamespaceURI(), + >>> name + "Request"), + >>> >>> MessageInfo.Type.INPUT); + >>> op.setInput(catchAll.getLocalPart() + "Request", mInfo); + >>> MessagePartInfo mpi = mInfo.addMessagePart("parameters"); + >>> mpi.setElement(true); >>> + mpi.setTypeClass(c); >>> + mpi.setTypeQName(XMLSchemaQNames.XSD_ANY); >>> + >>> + mInfo = op.createMessage(new >>> QName(catchAll.getNamespaceURI(), + >>> name + "Response"), + >>> MessageInfo.Type.OUTPUT); + >>> op.setOutput(name + "Response", mInfo); + >>> mpi = mInfo.addMessagePart("parameters"); + >>> mpi.setElement(true); >>> + mpi.setTypeClass(c); >>> + mpi.setTypeQName(XMLSchemaQNames.XSD_ANY); >>> + >>> + BindingOperationInfo bo = new >>> BindingOperationInfo(bind, op); + >>> bind.addOperation(bo); >>> + } >>> + } >>> } >>> } >>> } catch (SecurityException e) { >>> @@ -318,44 +353,6 @@ >>> } >>> } >>> >>> - /** >>> - * Create a mock service model with two operations - invoke and >>> - * invokeOneway. >>> - */ >>> - // @Override >>> - // protected InterfaceInfo createInterface(ServiceInfo serviceInfo) >>> { - // if (jaxWsImplementorInfo.isWebServiceProvider()) { >>> - // return createInterfaceForProvider(serviceInfo); >>> - // } else { >>> - // return super.createInterface(serviceInfo); >>> - // } >>> - // } >>> - // >>> - // protected InterfaceInfo createInterfaceForProvider(ServiceInfo >>> - // serviceInfo) { >>> - // >>> - // InterfaceInfo intf = new InterfaceInfo(serviceInfo, >>> getInterfaceName()); - // >>> - // String ns = getServiceNamespace(); >>> - // OperationInfo invoke = intf.addOperation(new QName(ns, >>> "invoke")); - // >>> - // MessageInfo input = invoke.createMessage(new QName(ns, "input")); >>> - // invoke.setInput("input", input); >>> - // >>> - // input.addMessagePart("in"); >>> - // >>> - // MessageInfo output = invoke.createMessage(new QName(ns, >>> "output")); - // invoke.setOutput("output", output); >>> - // >>> - // output.addMessagePart("out"); >>> - // // >>> - // // OperationInfo invokeOneWay = intf.addOperation(new >>> - // // QName(getServiceNamespace(), "invokeOneWay")); >>> - // // invokeOneWay.setInput("input", input); >>> - // >>> - // return intf; >>> - // } >>> - >>> >>> @Override >>> protected Class getBeanClass(Class exClass) { >>> @@ -404,6 +401,7 @@ >>> protected final void initConfiguration(JaxWsImplementorInfo ii) { >>> if (ii.isWebServiceProvider()) { >>> jaxWsConfiguration = new WebServiceProviderConfiguration(); >>> + jaxWsConfiguration.setServiceFactory(this); >>> getServiceConfigurations().add(0, jaxWsConfiguration); >>> setWrapped(false); >>> setDataBinding(new SourceDataBinding()); >>> @@ -525,4 +523,13 @@ >>> super.buildServiceFromClass(); >>> getService().put(WS_FEATURES, getWsFeatures()); >>> } >>> + >>> + protected void initializeParameter(MessagePartInfo part, Class >>> rawClass, Type type) { + if (implInfo.isWebServiceProvider()) { >>> + part.setTypeQName(XMLSchemaQNames.XSD_ANY); >>> + part.setTypeClass(rawClass); >>> + return; >>> + } >>> + super.initializeParameter(part, rawClass, type); >>> + } >>> } >>> >>> Modified: >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/We >>> bServiceProviderConfiguration.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/or >>> g/apache/cxf/jaxws/support/WebServiceProviderConfiguration.java?rev=774058 >>> &r1=774057&r2=774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/We >>> bServiceProviderConfiguration.java (original) +++ >>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/We >>> bServiceProviderConfiguration.java Tue May 12 20:08:51 2009 @@ -85,7 +85,7 >>> @@ >>> >>> @Override >>> public Boolean isWrapped(Method m) { >>> - return true; >>> + return Boolean.FALSE; >>> } >>> } >>> >>> >>> Modified: >>> cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/provider/P >>> roviderServiceFactoryTest.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/or >>> g/apache/cxf/jaxws/provider/ProviderServiceFactoryTest.java?rev=774058&r1= >>> 774057&r2=774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/provider/P >>> roviderServiceFactoryTest.java (original) +++ >>> cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/provider/P >>> roviderServiceFactoryTest.java Tue May 12 20:08:51 2009 @@ -23,7 +23,6 @@ >>> import org.w3c.dom.Node; >>> >>> import org.apache.cxf.Bus; >>> -import org.apache.cxf.binding.AbstractBindingFactory; >>> import org.apache.cxf.binding.Binding; >>> import org.apache.cxf.binding.soap.SoapBinding; >>> import org.apache.cxf.binding.soap.model.SoapBindingInfo; >>> @@ -73,8 +72,6 @@ >>> Endpoint endpoint = server.getEndpoint(); >>> Binding binding = endpoint.getBinding(); >>> assertTrue(binding instanceof SoapBinding); >>> - assertEquals(Boolean.TRUE, >>> endpoint.getEndpointInfo().getBinding() - >>> .getProperty(AbstractBindingFactory.DATABINDING_DISABLED)); } >>> >>> @Test >>> @@ -146,7 +143,6 @@ >>> SoapBindingInfo sb = >>> (SoapBindingInfo)endpoint.getEndpointInfo().getBinding(); >>> assertEquals("document", sb.getStyle()); >>> assertEquals(false, bean.isWrapped()); >>> - assertEquals(Boolean.TRUE, >>> sb.getProperty(AbstractBindingFactory.DATABINDING_DISABLED)); >>> >>> assertEquals(1, sb.getOperations().size()); >>> Node res = invoke(address, LocalTransportFactory.TRANSPORT_ID, >>> "/org/apache/cxf/jaxws/sayHi.xml"); @@ -185,7 +181,6 @@ >>> SoapBindingInfo sb = >>> (SoapBindingInfo)endpoint.getEndpointInfo().getBinding(); >>> assertEquals("document", sb.getStyle()); >>> assertEquals(false, bean.isWrapped()); >>> - assertEquals(Boolean.TRUE, >>> sb.getProperty(AbstractBindingFactory.DATABINDING_DISABLED)); >>> >>> assertEquals(1, sb.getOperations().size()); >>> Node res = invoke(address, LocalTransportFactory.TRANSPORT_ID, >>> "/org/apache/cxf/jaxws/sayHi.xml"); >>> >>> Modified: >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/Dispatch >>> ClientServerTest.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/ >>> cxf/systest/dispatch/DispatchClientServerTest.java?rev=774058&r1=774057&r2 >>> =774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/Dispatch >>> ClientServerTest.java (original) +++ >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/dispatch/Dispatch >>> ClientServerTest.java Tue May 12 20:08:51 2009 @@ -495,8 +495,15 @@ >>> TestSAXSourceHandler tssh = new TestSAXSourceHandler(); >>> Future fd = disp.invokeAsync(saxSourceReq3, tssh); >>> assertNotNull(fd); >>> + >>> + int count = 0; >>> while (!fd.isDone()) { >>> + if (count > 100) { >>> + fail("Did not finish in 10 seconds"); >>> + } >>> //wait >>> + Thread.sleep(100); >>> + count++; >>> } >>> String expected3 = "Hello TestSOAPInputMessage3"; >>> SAXSource saxSourceResp3 = tssh.getSAXSource(); >>> >>> Modified: >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/Attachme >>> ntProviderXMLClientServerTest.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/ >>> cxf/systest/provider/AttachmentProviderXMLClientServerTest.java?rev=774058 >>> &r1=774057&r2=774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/Attachme >>> ntProviderXMLClientServerTest.java (original) +++ >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/Attachme >>> ntProviderXMLClientServerTest.java Tue May 12 20:08:51 2009 @@ -61,7 +61,8 >>> @@ >>> connection.getOutputStream().close(); >>> is.close(); >>> >>> - assertTrue("wrong content type", >>> connection.getContentType().contains("multipart/related")); + >>> assertTrue("wrong content type: " + connection.getContentType(), + >>> connection.getContentType().contains("multipart/related")); >>> String input = IOUtils.toString(connection.getInputStream()); >>> >>> int idx = input.indexOf("--uuid"); >>> >>> Modified: >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWDOMSou >>> rcePayloadProvider.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/ >>> cxf/systest/provider/HWDOMSourcePayloadProvider.java?rev=774058&r1=774057& >>> r2=774058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWDOMSou >>> rcePayloadProvider.java (original) +++ >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWDOMSou >>> rcePayloadProvider.java Tue May 12 20:08:51 2009 @@ -71,6 +71,9 @@ >>> DOMSource response = new DOMSource(); >>> >>> Node n = request.getNode(); >>> + if (n instanceof Document) { >>> + n = ((Document)n).getDocumentElement(); >>> + } >>> if (n.getLocalName().equals(sayHi.getLocalPart())) { >>> response.setNode(sayHiResponse); >>> } else if (n.getLocalName().equals(greetMe.getLocalPart())) { >>> >>> Modified: >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWSoapMe >>> ssageProvider.java URL: >>> http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/ >>> cxf/systest/provider/HWSoapMessageProvider.java?rev=774058&r1=774057&r2=77 >>> 4058&view=diff >>> ========================================================================= >>> ===== --- >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWSoapMe >>> ssageProvider.java (original) +++ >>> cxf/trunk/systests/src/test/java/org/apache/cxf/systest/provider/HWSoapMe >>> ssageProvider.java Tue May 12 20:08:51 2009 @@ -19,9 +19,11 @@ >>> >>> package org.apache.cxf.systest.provider; >>> import java.io.InputStream; >>> +import java.util.Iterator; >>> >>> import javax.jws.HandlerChain; >>> import javax.xml.namespace.QName; >>> +import javax.xml.soap.AttachmentPart; >>> import javax.xml.soap.MessageFactory; >>> import javax.xml.soap.SOAPBody; >>> import javax.xml.soap.SOAPMessage; >>> @@ -32,6 +34,8 @@ >>> >>> import org.w3c.dom.Node; >>> >>> +import org.apache.cxf.helpers.CastUtils; >>> + >>> //The following wsdl file is used. >>> //wsdlLocation = >>> "/trunk/testutils/src/main/resources/wsdl/hello_world_rpc_lit.wsdl" >>> @WebServiceProvider(portName = "SoapPortProviderRPCLit1", >>> @@ -73,6 +77,17 @@ >>> } >>> if (n.getLocalName().equals(sayHi.getLocalPart())) { >>> response = sayHiResponse; >>> + if (request.countAttachments() > 0) { >>> + MessageFactory factory = >>> MessageFactory.newInstance(); + InputStream is = >>> getClass().getResourceAsStream("resources/sayHiRpcLiteralResp.xml"); + >>> response = factory.createMessage(null, is); + >>> is.close(); >>> + Iterator it = >>> CastUtils.cast(request.getAttachments(), + >>> AttachmentPart.class); + >>> while (it.hasNext()) { >>> + response.addAttachmentPart(it.next()); >>> + } >>> + } >>> } else if (n.getLocalName().equals(greetMe.getLocalPart())) >>> { response = greetMeResponse; >>> } else { >>> > > -- Freeman Fang ------------------------ Open Source SOA: http://fusesource.com