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"};