Is this a coincidence and you were working on this all along? On Wed, Mar 26, 2008 at 5:23 PM, <[EMAIL PROTECTED]> wrote:
> Author: dkulp > Date: Wed Mar 26 14:23:40 2008 > New Revision: 641581 > > URL: http://svn.apache.org/viewvc?rev=641581&view=rev > Log: > Add a new "FastInfoset" feature that will turn on fastinfoset negotiation > and usage for more efficient on the wire transmissions. > (tested interop with the JAX-WS RI to make sure it works) > > Added: > > > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java > (with props) > > > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java > (with props) > > > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java > (with props) > Modified: > > > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/NamespaceHandler.java > > > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java > incubator/cxf/trunk/rt/core/src/main/resources/schemas/core.xsd > > > incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java > > > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java > > > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java > > > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java > > > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java > > Modified: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/NamespaceHandler.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/NamespaceHandler.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/NamespaceHandler.java > (original) > +++ > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/NamespaceHandler.java > Wed Mar 26 14:23:40 2008 > @@ -19,6 +19,7 @@ > package org.apache.cxf.bus.spring; > > import org.apache.cxf.configuration.spring.SimpleBeanDefinitionParser; > +import org.apache.cxf.feature.FastInfosetFeature; > import org.apache.cxf.feature.LoggingFeature; > import org.springframework.beans.factory.xml.NamespaceHandlerSupport; > > @@ -28,5 +29,7 @@ > new BusDefinitionParser()); > registerBeanDefinitionParser("logging", > new SimpleBeanDefinitionParser( > LoggingFeature.class)); > + registerBeanDefinitionParser("fastinfoset", > + new SimpleBeanDefinitionParser( > FastInfosetFeature.class)); > } > } > > Added: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java?rev=641581&view=auto > > ============================================================================== > --- > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java > (added) > +++ > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java > Wed Mar 26 14:23:40 2008 > @@ -0,0 +1,73 @@ > +/** > + * 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.feature; > + > +import org.apache.cxf.Bus; > +import org.apache.cxf.interceptor.FIStaxInInterceptor; > +import org.apache.cxf.interceptor.FIStaxOutInterceptor; > +import org.apache.cxf.interceptor.InterceptorProvider; > +//import org.apache.cxf.interceptor.FIStaxInInterceptor; > + > +/** > + * <pre> > + * <![CDATA[ > + <jaxws:endpoint ...> > + <jaxws:features> > + <bean class="org.apache.cxf.feature.FastInfosetFeature"/> > + </jaxws:features> > + </jaxws:endpoint> > + ]]> > + </pre> > + */ > +public class FastInfosetFeature extends AbstractFeature { > + > + boolean force; > + > + public FastInfosetFeature() { > + // > + } > + > + > + @Override > + protected void initializeProvider(InterceptorProvider provider, Bus > bus) { > + > + FIStaxInInterceptor in = new FIStaxInInterceptor(); > + FIStaxOutInterceptor out = new FIStaxOutInterceptor(force); > + provider.getInInterceptors().add(in); > + provider.getInFaultInterceptors().add(in); > + provider.getOutInterceptors().add(out); > + provider.getOutFaultInterceptors().add(out); > + } > + > + /** > + * Set if FastInfoset is always used without negotiation > + * @param b > + */ > + public void setForce(boolean b) { > + force = b; > + } > + > + /** > + * Retrieve the value set with [EMAIL PROTECTED] #setLimit(int)}. > + * @return > + */ > + public boolean getForce() { > + return force; > + } > +} > > Propchange: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java > > ------------------------------------------------------------------------------ > svn:eol-style = native > > Propchange: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java > > ------------------------------------------------------------------------------ > svn:keywords = Rev Date > > Added: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java?rev=641581&view=auto > > ============================================================================== > --- > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java > (added) > +++ > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java > Wed Mar 26 14:23:40 2008 > @@ -0,0 +1,74 @@ > +/** > + * 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.interceptor; > + > + > + > +import javax.xml.stream.XMLInputFactory; > +import javax.xml.stream.XMLStreamReader; > + > +import com.sun.xml.fastinfoset.stax.factory.StAXInputFactory; > + > +import org.apache.cxf.endpoint.Endpoint; > +import org.apache.cxf.message.Message; > +import org.apache.cxf.phase.AbstractPhaseInterceptor; > +import org.apache.cxf.phase.Phase; > + > +/** > + * Creates an XMLStreamReader from the InputStream on the Message. > + */ > +public class FIStaxInInterceptor extends > AbstractPhaseInterceptor<Message> { > + XMLInputFactory factory = new StAXInputFactory(); > + > + public FIStaxInInterceptor() { > + this(Phase.POST_STREAM); > + } > + public FIStaxInInterceptor(String phase) { > + super(phase); > + addBefore(StaxInInterceptor.class.getName()); > + } > + protected boolean isRequestor(Message message) { > + return Boolean.TRUE.equals(message.containsKey( > Message.REQUESTOR_ROLE)); > + } > + > + public void handleMessage(Message message) { > + if (isGET(message) || message.getContentFormats().contains( > XMLStreamReader.class)) { > + return; > + } > + > + String ct = (String)message.get(Message.CONTENT_TYPE); > + if (ct != null && ct.indexOf("fastinfoset") != -1) { > + message.put(XMLInputFactory.class.getName(), factory); > + ct = ct.replace("fastinfoset", "xml"); > + if (ct.contains("application/xml")) { > + ct = ct.replace("application/xml", "text/xml"); > + } > + message.put(Message.CONTENT_TYPE, ct); > + > + message.getExchange().put(FIStaxOutInterceptor.FI_ENABLED, > Boolean.TRUE); > + if (isRequestor(message)) { > + //record the fact that is worked so future requests will > + //automatically be FI enabled > + Endpoint ep = message.getExchange().get(Endpoint.class); > + ep.put(FIStaxOutInterceptor.FI_ENABLED, Boolean.TRUE); > + } > + } > + } > +} > > Propchange: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java > > ------------------------------------------------------------------------------ > svn:eol-style = native > > Propchange: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxInInterceptor.java > > ------------------------------------------------------------------------------ > svn:keywords = Rev Date > > Added: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java?rev=641581&view=auto > > ============================================================================== > --- > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java > (added) > +++ > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java > Wed Mar 26 14:23:40 2008 > @@ -0,0 +1,106 @@ > +/** > + * 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.interceptor; > + > + > +import java.util.ArrayList; > +import java.util.List; > +import java.util.Map; > + > +import javax.xml.stream.XMLOutputFactory; > +import javax.xml.stream.XMLStreamWriter; > + > +import com.sun.xml.fastinfoset.stax.factory.StAXOutputFactory; > + > +import org.apache.cxf.helpers.CastUtils; > +import org.apache.cxf.message.Message; > +import org.apache.cxf.phase.AbstractPhaseInterceptor; > +import org.apache.cxf.phase.Phase; > + > + > +/** > + * Creates an XMLStreamReader from the InputStream on the Message. > + */ > +public class FIStaxOutInterceptor extends > AbstractPhaseInterceptor<Message> { > + public static final String FI_ENABLED = " > org.apache.cxf.fastinfoset.enabled"; > + > + boolean force; > + XMLOutputFactory factory = new StAXOutputFactory(); > + > + public FIStaxOutInterceptor() { > + super(Phase.PRE_STREAM); > + addAfter(AttachmentOutInterceptor.class.getName()); > + addBefore(StaxOutInterceptor.class.getName()); > + } > + public FIStaxOutInterceptor(boolean f) { > + this(); > + force = f; > + } > + protected boolean isRequestor(Message message) { > + return Boolean.TRUE.equals(message.containsKey( > Message.REQUESTOR_ROLE)); > + } > + > + > + public void handleMessage(Message message) { > + XMLStreamWriter writer = message.getContent(XMLStreamWriter.class > ); > + if (writer != null) { > + return; > + } > + boolean req = isRequestor(message); > + Object o = message.getContextualProperty(FI_ENABLED); > + if (!req) { > + if (message.getExchange().getInMessage() != null) { > + //check incoming accept header > + String s = > (String)message.getExchange().getInMessage().get( > Message.ACCEPT_CONTENT_TYPE); > + if (s != null && s.contains("fastinfoset")) { > + o = Boolean.TRUE; > + } > + } > + } else { > + Map<String, List<String>> headers > + = CastUtils.cast((Map<?, ?>)message.get( > Message.PROTOCOL_HEADERS)); > + List<String> accepts = headers.get("Accept"); > + if (accepts == null) { > + accepts = new ArrayList<String>(); > + headers.put("Accept", accepts); > + } > + String a = "application/fastinfoset"; > + if (!accepts.isEmpty()) { > + a += ", " + accepts.get(0); > + } > + accepts.set(0, a); > + } > + > + if (force > + || Boolean.TRUE.equals(o)) { > + > + message.put(XMLOutputFactory.class.getName(), > + factory); > + String s = (String)message.get(Message.CONTENT_TYPE); > + if (s.contains("application/soap+xml")) { > + s = s.replace("application/soap+xml", > "application/soap+fastinfoset"); > + message.put(Message.CONTENT_TYPE, s); > + } else { > + message.put(Message.CONTENT_TYPE, > "application/fastinfoset"); > + } > + } > + } > + > +} > > Propchange: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java > > ------------------------------------------------------------------------------ > svn:eol-style = native > > Propchange: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java > > ------------------------------------------------------------------------------ > svn:keywords = Rev Date > > Modified: > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java > (original) > +++ > incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxOutInterceptor.java > Wed Mar 26 14:23:40 2008 > @@ -41,6 +41,8 @@ > * Creates an XMLStreamReader from the InputStream on the Message. > */ > public class StaxOutInterceptor extends AbstractPhaseInterceptor<Message> > { > + public static final String FORCE_START_DOCUMENT = " > org.apache.cxf.stax.force-start-document"; > + > private static final ResourceBundle BUNDLE = BundleUtils.getBundle( > StaxOutInterceptor.class); > private static Map<Object, XMLOutputFactory> factories = new > HashMap<Object, XMLOutputFactory>(); > > @@ -64,6 +66,9 @@ > > try { > writer = > getXMLOutputFactory(message).createXMLStreamWriter(os, encoding); > + if > (Boolean.TRUE.equals(message.getContextualProperty(FORCE_START_DOCUMENT))) > { > + writer.writeStartDocument(encoding); > + } > } catch (XMLStreamException e) { > throw new Fault(new > org.apache.cxf.common.i18n.Message("STREAM_CREATE_EXC", > BUNDLE), e); > } > @@ -91,6 +96,9 @@ > public static XMLOutputFactory getXMLOutputFactory(Message m) throws > Fault { > Object o = m.getContextualProperty(XMLOutputFactory.class.getName > ()); > if (o instanceof XMLOutputFactory) { > + m.put( > AbstractOutDatabindingInterceptor.DISABLE_OUTPUTSTREAM_OPTIMIZATION, > + Boolean.TRUE); > + m.put(FORCE_START_DOCUMENT, Boolean.TRUE); > return (XMLOutputFactory)o; > } else if (o != null) { > XMLOutputFactory xif = (XMLOutputFactory)factories.get(o); > @@ -118,6 +126,9 @@ > throw new Fault(e); > } > } > + m.put( > AbstractOutDatabindingInterceptor.DISABLE_OUTPUTSTREAM_OPTIMIZATION, > + Boolean.TRUE); > + m.put(FORCE_START_DOCUMENT, Boolean.TRUE); > return xif; > } else { > return StaxUtils.getXMLOutputFactory(); > > Modified: incubator/cxf/trunk/rt/core/src/main/resources/schemas/core.xsd > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/resources/schemas/core.xsd?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- incubator/cxf/trunk/rt/core/src/main/resources/schemas/core.xsd > (original) > +++ incubator/cxf/trunk/rt/core/src/main/resources/schemas/core.xsd Wed > Mar 26 14:23:40 2008 > @@ -48,6 +48,18 @@ > <xsd:attribute name="limit" type="xsd:int" use="optional" > default="102400"/> > </xsd:complexType> > </xsd:element> > + <xsd:element name="fastinfoset"> > + <xsd:annotation> > + <xsd:documentation> > + The fastinfoset feature enables you to turn on using fastinfoset > encoding of > + xml payloads. > + </xsd:documentation> > + </xsd:annotation> > + <xsd:complexType> > + <xsd:sequence /> > + <xsd:attribute name="force" type="xsd:boolean" use="optional" > default="false"/> > + </xsd:complexType> > + </xsd:element> > > <xsd:element name="bus"> > <xsd:complexType> > > Modified: > incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java > (original) > +++ > incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java > Wed Mar 26 14:23:40 2008 > @@ -296,7 +296,9 @@ > && !Modifier.isPublic(field.getModifiers())) { > return false; > } > - > + if (field.getAnnotation(XmlJavaTypeAdapter.class) != null) { > + return false; > + } > if (accessType == XmlAccessType.NONE > || accessType == XmlAccessType.PROPERTY) { > return checkJaxbAnnotation(field.getAnnotations()); > @@ -325,7 +327,8 @@ > > boolean isPropGetter = method.getName().startsWith("get") || > method.getName().startsWith("is"); > > - if (!isPropGetter) { > + if (!isPropGetter > + || method.getAnnotation(XmlJavaTypeAdapter.class) != null) { > return false; > } > int beginIndex = 3; > > Modified: > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java > (original) > +++ > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java > Wed Mar 26 14:23:40 2008 > @@ -137,7 +137,10 @@ > > if (serviceBean != null) { > initializeAnnotationInterceptors(server.getEndpoint(), > this.getServiceBean().getClass()); > + } else if (getServiceClass() != null) { > + initializeAnnotationInterceptors(server.getEndpoint(), > getServiceClass()); > } > + > > applyFeatures(); > return server; > > Modified: > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java > (original) > +++ > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java > Wed Mar 26 14:23:40 2008 > @@ -59,7 +59,7 @@ > > @BeforeClass > public static void startServers() throws Exception { > - assertTrue("server did not launch correctly", launchServer( > ServerMisc.class)); > + assertTrue("server did not launch correctly", launchServer( > ServerMisc.class, true)); > } > > @Test > > Modified: > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java > (original) > +++ > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java > Wed Mar 26 14:23:40 2008 > @@ -31,6 +31,7 @@ > import javax.xml.ws.RequestWrapper; > import javax.xml.ws.ResponseWrapper; > > +import org.apache.cxf.feature.Features; > import org.apache.cxf.message.Exchange; > import org.apache.cxf.systest.jaxws.types.Bar; > > @@ -38,6 +39,7 @@ > targetNamespace = " > http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstService") > @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, > use = SOAPBinding.Use.LITERAL) > [EMAIL PROTECTED](features = { "org.apache.cxf.feature.FastInfosetFeature" }) > public interface DocLitWrappedCodeFirstService { > > @WebMethod > > Modified: > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java > URL: > http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java?rev=641581&r1=641580&r2=641581&view=diff > > ============================================================================== > --- > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java > (original) > +++ > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java > Wed Mar 26 14:23:40 2008 > @@ -27,6 +27,7 @@ > import javax.xml.ws.Holder; > import javax.xml.ws.WebServiceContext; > > +import org.apache.cxf.feature.Features; > import org.apache.cxf.message.Exchange; > import org.apache.cxf.systest.jaxws.types.Bar; > import org.apache.cxf.systest.jaxws.types.BarImpl; > @@ -35,6 +36,7 @@ > serviceName = "DocLitWrappedCodeFirstService", > portName = "DocLitWrappedCodeFirstServicePort", > targetNamespace = " > http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstService") > [EMAIL PROTECTED](features = { "org.apache.cxf.feature.FastInfosetFeature" }) > public class DocLitWrappedCodeFirstServiceImpl implements > DocLitWrappedCodeFirstService { > public static final String DATA[] = new String[] {"string1", > "string2", "string3"}; > > > >
