You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2009/03/17 11:50:22 UTC
svn commit: r755184 - in /cxf/branches/2.1.x-fixes: ./
api/src/main/java/org/apache/cxf/databinding/
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/
rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/
rt/databinding/xmlbeans/src/main/java/org...
Author: ningjiang
Date: Tue Mar 17 10:50:22 2009
New Revision: 755184
URL: http://svn.apache.org/viewvc?rev=755184&view=rev
Log:
Merged revisions 755153 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r755153 | ningjiang | 2009-03-17 16:47:06 +0800 (Tue, 17 Mar 2009) | 1 line
CXF-2116, CXF-2099 Refactoring of the WrapperHelper
........
Added:
cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java
- copied unchanged from r755153, cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java
cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java
- copied unchanged from r755153, cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java
cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java
- copied unchanged from r755153, cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java
cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java
- copied unchanged from r755153, cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java
cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
- copied unchanged from r755153, cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java
- copied unchanged from r755153, cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java
cxf/branches/2.1.x-fixes/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java
- copied unchanged from r755153, cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java
Removed:
cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java
cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelperCompiler.java
cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperHelperTest.java
Modified:
cxf/branches/2.1.x-fixes/ (props changed)
cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
cxf/branches/2.1.x-fixes/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java
cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java
Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Mar 17 10:50:22 2009
@@ -1 +1 @@
-/cxf/trunk:686333-686363,686764,686820,687096,687194,687363,687387,687463,687543,687722,687798,687814,687817,687891,687910,687914,688086,688102,688133,688596,688735,688870,689572,689596,689855,689924,690067,690289,691246,691271,691295,691338,691355,691488,691602,691646,691706,691728,692116,692157,692310,692466,692499,693653,693819,694179,694263,694417,694716,694744,694747,694795,694869,694981,694987,694993,695041,695096,695396,695484,695537,695552,695561,695619,695684,695835,695840,695868,695935,695977,696016,696094,696433,696720,697085,697868,698128,699289,700261,700507,700602,700981,701316,701783,701830,701862,702187,702205-702248,702267,702547,702561,702580,702602,702609,702616,702653,702656,702957,703191,703239,703309,703501,703513,703548,704584,704937,704997,705150,705235,705274,705340,705446,705548,705614,705692,705708,706482,706631,706675,706900,706909,707034,707089,707100,707902,708035,708044,708074,708410,708417,708550,708554,709353-709354,709425,710076,710150,71015
4,711193,711388,711410,711490,711635,711949,711975,712194,712198,712238,712272,712299,712312,712670,712893,713082,713095-713096,713099,713584,713597,713737,713804,713899,714167-714168,714245,714255,717937-717961,718281-718448,718565,718620,718640,718665,718970,719017,719210,719215-719218,719222-719273,719305,719327-719680,720053,720119-720218,720238,720293-720316,720497,721221,721241,721501,722117,722129,722412,722988,723024,723338,723378,723716-723791,724333-724372,724433-724438,724449,724481,724485,724668,724780,724782,724785,724793,724795,724940,725071,725316,725332,725335,725348,725364,725418,725425-725426,725455,725506,725554,725562,725651,725671,725688,725754,725773,725799,725839,726342,726524,726631,726634,726637,726639,726692,726724,726769,726992,727096,727445,727521,727568,727692,727754,727781,727792,728070,728087,728696,728897,729051,729430,729449,729460,729863,730082,730139,730889,730891,731598,731604,731615,731631,731635,732036,732050,732320,732363,732411,732450,
732710,732773,732827,732829,733512,733582,733901,734367,734462,734666,734762,734772,734812,734836,734965,735113,735252,735722-735723,735729,735734,735751,735782,735787,735987,736332,736343,736352,736358-736362,736408,736423,736448,736491,736621,736726,736736,736738-736739,736766,736825,736852,737032,737046,737061,737069,737124,737237,737246,737299,737356,737494,737498,737761,737817,737849,737855,737994,738166,738178,738201,738210,738242,738244,738265,738516,738583,738863,738937,738983,739366-739367,739451-739452,739799-739800,739867,739876-739877,739922,739937,739990,740045,740108,740154,740186,740197,740255,740706,740730,740810,740844,740886,740902,740923,740994,741058,741124,741152,741188,741521,741529,741879,742914,743087,743439,743441,743459,743469,743965,743967,744175,744195,744237,744756,745214,745243,745560,745578,745586,745592,745638,745950,746012,746019-746020,746256,746266,746306,746357,746373-746374,747217,747386,747406,747454,747649,747766,747986,748159,748192,74
8223,748305,748313,748603-748604,748768,749420,749449,749454-749456,749505,749511,749513,749584,749767,749771,749799,749890,750059-750060,750302,750591,750689,750935,751067-751110,751233,751527,751567,751576,751607,751732,751740,751787,751828,751840,751972-751974,752122,752132,752136,752558,752613,752680,752728,752753,752849,752880-752881,752883,752961,752992,753205,753293,753335,753338,753388
+/cxf/trunk:686333-686363,686764,686820,687096,687194,687363,687387,687463,687543,687722,687798,687814,687817,687891,687910,687914,688086,688102,688133,688596,688735,688870,689572,689596,689855,689924,690067,690289,691246,691271,691295,691338,691355,691488,691602,691646,691706,691728,692116,692157,692310,692466,692499,693653,693819,694179,694263,694417,694716,694744,694747,694795,694869,694981,694987,694993,695041,695096,695396,695484,695537,695552,695561,695619,695684,695835,695840,695868,695935,695977,696016,696094,696433,696720,697085,697868,698128,699289,700261,700507,700602,700981,701316,701783,701830,701862,702187,702205-702248,702267,702547,702561,702580,702602,702609,702616,702653,702656,702957,703191,703239,703309,703501,703513,703548,704584,704937,704997,705150,705235,705274,705340,705446,705548,705614,705692,705708,706482,706631,706675,706900,706909,707034,707089,707100,707902,708035,708044,708074,708410,708417,708550,708554,709353-709354,709425,710076,710150,71015
4,711193,711388,711410,711490,711635,711949,711975,712194,712198,712238,712272,712299,712312,712670,712893,713082,713095-713096,713099,713584,713597,713737,713804,713899,714167-714168,714245,714255,717937-717961,718281-718448,718565,718620,718640,718665,718970,719017,719210,719215-719218,719222-719273,719305,719327-719680,720053,720119-720218,720238,720293-720316,720497,721221,721241,721501,722117,722129,722412,722988,723024,723338,723378,723716-723791,724333-724372,724433-724438,724449,724481,724485,724668,724780,724782,724785,724793,724795,724940,725071,725316,725332,725335,725348,725364,725418,725425-725426,725455,725506,725554,725562,725651,725671,725688,725754,725773,725799,725839,726342,726524,726631,726634,726637,726639,726692,726724,726769,726992,727096,727445,727521,727568,727692,727754,727781,727792,728070,728087,728696,728897,729051,729430,729449,729460,729863,730082,730139,730889,730891,731598,731604,731615,731631,731635,732036,732050,732320,732363,732411,732450,
732710,732773,732827,732829,733512,733582,733901,734367,734462,734666,734762,734772,734812,734836,734965,735113,735252,735722-735723,735729,735734,735751,735782,735787,735987,736332,736343,736352,736358-736362,736408,736423,736448,736491,736621,736726,736736,736738-736739,736766,736825,736852,737032,737046,737061,737069,737124,737237,737246,737299,737356,737494,737498,737761,737817,737849,737855,737994,738166,738178,738201,738210,738242,738244,738265,738516,738583,738863,738937,738983,739366-739367,739451-739452,739799-739800,739867,739876-739877,739922,739937,739990,740045,740108,740154,740186,740197,740255,740706,740730,740810,740844,740886,740902,740923,740994,741058,741124,741152,741188,741521,741529,741879,742914,743087,743439,743441,743459,743469,743965,743967,744175,744195,744237,744756,745214,745243,745560,745578,745586,745592,745638,745950,746012,746019-746020,746256,746266,746306,746357,746373-746374,747217,747386,747406,747454,747649,747766,747986,748159,748192,74
8223,748305,748313,748603-748604,748768,749420,749449,749454-749456,749505,749511,749513,749584,749767,749771,749799,749890,750059-750060,750302,750591,750689,750935,751067-751110,751233,751527,751567,751576,751607,751732,751740,751787,751828,751840,751972-751974,752122,752132,752136,752558,752613,752680,752728,752753,752849,752880-752881,752883,752961,752992,753205,753293,753335,753338,753388,755153
Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=755184&r1=755183&r2=755184&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Tue Mar 17 10:50:22 2009
@@ -25,6 +25,7 @@
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,11 +42,13 @@
import java.util.regex.Pattern;
import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.ValidationEventHandler;
+import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
@@ -65,8 +68,11 @@
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.common.xmlschema.SchemaCollection;
import org.apache.cxf.databinding.AbstractDataBinding;
+import org.apache.cxf.databinding.AbstractWrapperHelper;
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.databinding.DataWriter;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
import org.apache.cxf.jaxb.io.DataReaderImpl;
import org.apache.cxf.jaxb.io.DataWriterImpl;
import org.apache.cxf.service.Service;
@@ -74,7 +80,7 @@
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.ws.addressing.ObjectFactory;
-public class JAXBDataBinding extends AbstractDataBinding {
+public class JAXBDataBinding extends AbstractDataBinding implements WrapperCapableDatabinding {
public static final String SCHEMA_RESOURCE = "SCHEMRESOURCE";
public static final String MTOM_THRESHOLD = "org.apache.cxf.jaxb.mtomThreshold";
@@ -718,4 +724,187 @@
}
}
+ public WrapperHelper createWrapperHelper(Class<?> wrapperType, List<String> partNames,
+ List<String> elTypeNames, List<Class<?>> partClasses) {
+ List<Method> getMethods = new ArrayList<Method>(partNames.size());
+ List<Method> setMethods = new ArrayList<Method>(partNames.size());
+ List<Method> jaxbMethods = new ArrayList<Method>(partNames.size());
+ List<Field> fields = new ArrayList<Field>(partNames.size());
+
+ Method allMethods[] = wrapperType.getMethods();
+ String packageName = PackageUtils.getPackageName(wrapperType);
+
+ //if wrappertype class is generated by ASM,getPackage() always return null
+ if (wrapperType.getPackage() != null) {
+ packageName = wrapperType.getPackage().getName();
+ }
+
+ String objectFactoryClassName = packageName + ".ObjectFactory";
+
+ Object objectFactory = null;
+ try {
+ objectFactory = wrapperType.getClassLoader().loadClass(objectFactoryClassName).newInstance();
+ } catch (Exception e) {
+ //ignore, probably won't need it
+ }
+ Method allOFMethods[];
+ if (objectFactory != null) {
+ allOFMethods = objectFactory.getClass().getMethods();
+ } else {
+ allOFMethods = new Method[0];
+ }
+
+ for (int x = 0; x < partNames.size(); x++) {
+ String partName = partNames.get(x);
+ if (partName == null) {
+ getMethods.add(null);
+ setMethods.add(null);
+ fields.add(null);
+ jaxbMethods.add(null);
+ continue;
+ }
+
+ String elementType = elTypeNames.get(x);
+
+ String getAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);
+ String setAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.SETTER);
+ Method getMethod = null;
+ Method setMethod = null;
+ Class<?> valueClass = wrapperType;
+
+ try {
+ getMethod = valueClass.getMethod(getAccessor, AbstractWrapperHelper.NO_CLASSES);
+ } catch (NoSuchMethodException ex) {
+ //ignore for now
+ }
+
+ Field elField = getElField(partName, valueClass);
+ if (getMethod == null
+ && elementType != null
+ && "boolean".equals(elementType.toLowerCase())
+ && (elField == null
+ || (!Collection.class.isAssignableFrom(elField.getType())
+ && !elField.getType().isArray()))) {
+
+ try {
+ String newAcc = getAccessor.replaceFirst("get", "is");
+ getMethod = wrapperType.getMethod(newAcc, AbstractWrapperHelper.NO_CLASSES);
+ } catch (NoSuchMethodException ex) {
+ //ignore for now
+ }
+ }
+ if (getMethod == null
+ && "return".equals(partName)) {
+ //RI generated code uses this
+ try {
+ getMethod = valueClass.getMethod("get_return", AbstractWrapperHelper.NO_CLASSES);
+ } catch (NoSuchMethodException ex) {
+ try {
+ getMethod = valueClass.getMethod("is_return",
+ new Class[0]);
+ } catch (NoSuchMethodException ex2) {
+ //ignore for now
+ }
+ }
+ }
+ String setAccessor2 = setAccessor;
+ if ("return".equals(partName)) {
+ //some versions of jaxb map "return" to "set_return" instead of "setReturn"
+ setAccessor2 = "set_return";
+ }
+
+ for (Method method : allMethods) {
+ if (method.getParameterTypes() != null && method.getParameterTypes().length == 1
+ && (setAccessor.equals(method.getName())
+ || setAccessor2.equals(method.getName()))) {
+ setMethod = method;
+ break;
+ }
+ }
+
+ getMethods.add(getMethod);
+ setMethods.add(setMethod);
+ if (setMethod != null
+ && JAXBElement.class.isAssignableFrom(setMethod.getParameterTypes()[0])) {
+
+ String methodName = "create" + wrapperType.getSimpleName()
+ + setMethod.getName().substring(3);
+
+ for (Method m : allOFMethods) {
+ if (m.getName().equals(methodName)) {
+ jaxbMethods.add(m);
+ }
+ }
+ } else {
+ jaxbMethods.add(null);
+ }
+
+ if (elField != null) {
+ // JAXB Type get XmlElement Annotation
+ XmlElement el = elField.getAnnotation(XmlElement.class);
+ if (el != null
+ && partName.equals(el.name())) {
+ elField.setAccessible(true);
+ fields.add(elField);
+ } else {
+ fields.add(null);
+ }
+ } else {
+ fields.add(null);
+ }
+
+ }
+
+ return createWrapperHelper(wrapperType,
+ setMethods.toArray(new Method[setMethods.size()]),
+ getMethods.toArray(new Method[getMethods.size()]),
+ jaxbMethods.toArray(new Method[jaxbMethods.size()]),
+ fields.toArray(new Field[fields.size()]),
+ objectFactory);
+ }
+
+ private static Field getElField(String partName, Class<?> wrapperType) {
+ String fieldName = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.VARIABLE);
+ for (Field field : wrapperType.getDeclaredFields()) {
+ XmlElement el = field.getAnnotation(XmlElement.class);
+ if (el != null
+ && partName.equals(el.name())) {
+ return field;
+ }
+ if (field.getName().equals(fieldName)) {
+ return field;
+ }
+ }
+ return null;
+ }
+
+
+ private static WrapperHelper createWrapperHelper(Class<?> wrapperType, Method setMethods[],
+ Method getMethods[], Method jaxbMethods[],
+ Field fields[], Object objectFactory) {
+
+ WrapperHelper wh = compileWrapperHelper(wrapperType, setMethods, getMethods, jaxbMethods, fields,
+ objectFactory);
+
+ if (wh == null) {
+ wh = new JAXBWrapperHelper(wrapperType, setMethods, getMethods, jaxbMethods, fields,
+ objectFactory);
+ }
+ return wh;
+ }
+
+ private static WrapperHelper compileWrapperHelper(Class<?> wrapperType, Method setMethods[],
+ Method getMethods[], Method jaxbMethods[],
+ Field fields[], Object objectFactory) {
+ try {
+ Class.forName("org.objectweb.asm.ClassWriter");
+ return WrapperHelperCompiler.compileWrapperHelper(wrapperType, setMethods, getMethods,
+ jaxbMethods, fields, objectFactory);
+ } catch (ClassNotFoundException e) {
+ // ASM not found, just use reflection based stuff
+ e.printStackTrace();
+ }
+ return null;
+ }
+
}
Modified: cxf/branches/2.1.x-fixes/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java?rev=755184&r1=755183&r2=755184&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java (original)
+++ cxf/branches/2.1.x-fixes/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java Tue Mar 17 10:50:22 2009
@@ -19,6 +19,10 @@
package org.apache.cxf.xmlbeans;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -28,20 +32,25 @@
import org.w3c.dom.Node;
-
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.xmlschema.SchemaCollection;
import org.apache.cxf.databinding.AbstractDataBinding;
+import org.apache.cxf.databinding.AbstractWrapperHelper;
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.databinding.DataWriter;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
+import org.apache.cxf.jaxb.JAXBUtils;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.ServiceInfo;
+
+
/**
*
*/
-public class XmlBeansDataBinding extends AbstractDataBinding {
+public class XmlBeansDataBinding extends AbstractDataBinding implements WrapperCapableDatabinding {
private static final Logger LOG = LogUtils.getLogger(XmlBeansDataBinding.class);
private static final Class<?> SUPPORTED_READER_FORMATS[] = new Class<?>[] {XMLStreamReader.class};
@@ -103,4 +112,56 @@
}
}
+ public WrapperHelper createWrapperHelper(Class<?> wrapperType, List<String> partNames,
+ List<String> elTypeNames, List<Class<?>> partClasses) {
+
+ List<Method> getMethods = new ArrayList<Method>(partNames.size());
+ List<Method> setMethods = new ArrayList<Method>(partNames.size());
+ List<Field> fields = new ArrayList<Field>(partNames.size());
+
+ Method allMethods[] = wrapperType.getMethods();
+
+ for (int x = 0; x < partNames.size(); x++) {
+ String partName = partNames.get(x);
+ if (partName == null) {
+ getMethods.add(null);
+ setMethods.add(null);
+ fields.add(null);
+ continue;
+ }
+
+ String getAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);
+ String setAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.SETTER);
+ Method getMethod = null;
+ Method setMethod = null;
+ Class<?> valueClass = XmlBeansWrapperHelper.getXMLBeansValueType(wrapperType);
+ allMethods = valueClass.getMethods();
+
+ try {
+ getMethod = valueClass.getMethod(getAccessor, AbstractWrapperHelper.NO_CLASSES);
+ } catch (NoSuchMethodException ex) {
+ //ignore for now
+ }
+
+ for (Method method : allMethods) {
+ if (method.getParameterTypes() != null && method.getParameterTypes().length == 1
+ && (setAccessor.equals(method.getName()))) {
+ setMethod = method;
+ break;
+ }
+ }
+
+ getMethods.add(getMethod);
+ setMethods.add(setMethod);
+ // There is no filed in the XMLBeans type class
+ fields.add(null);
+
+ }
+
+ return new XmlBeansWrapperHelper(wrapperType,
+ setMethods.toArray(new Method[setMethods.size()]),
+ getMethods.toArray(new Method[getMethods.size()]),
+ fields.toArray(new Field[fields.size()]));
+ }
+
}
Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java?rev=755184&r1=755183&r2=755184&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java Tue Mar 17 10:50:22 2009
@@ -26,18 +26,23 @@
import java.util.logging.Logger;
import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
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.Service;
import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
import org.apache.cxf.service.model.BindingMessageInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
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.ServiceModelUtil;
public class WrapperClassInInterceptor extends AbstractPhaseInterceptor<Message> {
@@ -113,8 +118,15 @@
WrapperHelper helper = wrapperPart.getProperty("WRAPPER_CLASS", WrapperHelper.class);
if (helper == null) {
- helper = createWrapperHelper(messageInfo, wrappedMessageInfo, wrapperClass);
- wrapperPart.setProperty("WRAPPER_CLASS", helper);
+ Service service = ServiceModelUtil.getService(message.getExchange());
+ DataBinding dataBinding = service.getDataBinding();
+ if (dataBinding instanceof WrapperCapableDatabinding) {
+ helper = createWrapperHelper((WrapperCapableDatabinding)dataBinding,
+ messageInfo, wrappedMessageInfo, wrapperClass);
+ wrapperPart.setProperty("WRAPPER_CLASS", helper);
+ } else {
+ return;
+ }
}
MessageContentsList newParams;
@@ -150,7 +162,8 @@
}
}
- private WrapperHelper createWrapperHelper(MessageInfo messageInfo,
+ private WrapperHelper createWrapperHelper(WrapperCapableDatabinding dataBinding,
+ MessageInfo messageInfo,
MessageInfo wrappedMessageInfo,
Class<?> wrapperClass) {
List<String> partNames = new ArrayList<String>();
@@ -184,7 +197,7 @@
partNames.set(idx, p.getName().getLocalPart());
}
}
- return WrapperHelper.createWrapperHelper(wrapperClass,
+ return dataBinding.createWrapperHelper(wrapperClass,
partNames,
elTypeNames,
partClasses);
Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java?rev=755184&r1=755183&r2=755184&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java Tue Mar 17 10:50:22 2009
@@ -19,21 +19,27 @@
package org.apache.cxf.jaxws.interceptors;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
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.Service;
import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
import org.apache.cxf.service.model.BindingMessageInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
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.ServiceModelUtil;
public class WrapperClassOutInterceptor extends AbstractPhaseInterceptor<Message> {
public WrapperClassOutInterceptor() {
@@ -68,37 +74,32 @@
WrapperHelper helper = parts.get(0).getProperty("WRAPPER_CLASS", WrapperHelper.class);
if (helper == null) {
- List<String> partNames = new ArrayList<String>();
- List<String> elTypeNames = new ArrayList<String>();
- List<Class<?>> partClasses = new ArrayList<Class<?>>();
-
- for (MessagePartInfo p : messageInfo.getMessageParts()) {
- ensureSize(partNames, p.getIndex());
- ensureSize(elTypeNames, p.getIndex());
- ensureSize(partClasses, p.getIndex());
-
- partNames.set(p.getIndex(), p.getName().getLocalPart());
-
- String elementType = null;
- if (p.getTypeQName() == null) {
- // handling anonymous complex type
- elementType = null;
- } else {
- elementType = p.getTypeQName().getLocalPart();
- }
-
- elTypeNames.set(p.getIndex(), elementType);
- partClasses.set(p.getIndex(), p.getTypeClass());
+ Service service = ServiceModelUtil.getService(message.getExchange());
+ DataBinding dataBinding = service.getDataBinding();
+ if (dataBinding instanceof WrapperCapableDatabinding) {
+ helper = createWrapperHelper((WrapperCapableDatabinding)dataBinding,
+ messageInfo, wrappedMsgInfo, wrapped);
+ parts.get(0).setProperty("WRAPPER_CLASS", helper);
+ } else {
+ return;
}
- helper = WrapperHelper.createWrapperHelper(wrapped,
- partNames,
- elTypeNames,
- partClasses);
-
- parts.get(0).setProperty("WRAPPER_CLASS", helper);
}
try {
- MessageContentsList newObjs = new MessageContentsList();
+ MessageContentsList newObjs = new MessageContentsList();
+ Object en = message.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
+ // set the validate option for XMLBeans Wrapper Helper
+ if (Boolean.TRUE.equals(en) || "true".equals(en)) {
+ try {
+ Class xmlBeanWrapperHelperClass =
+ Class.forName("org.apache.cxf.xmlbeans.XmlBeansWrapperHelper");
+ if (xmlBeanWrapperHelperClass.isInstance(helper)) {
+ Method method = xmlBeanWrapperHelperClass.getMethod("setValidate", boolean.class);
+ method.invoke(helper, true);
+ }
+ } catch (Exception exception) {
+ // do nothing there
+ }
+ }
Object o2 = helper.createWrapperObject(objs);
newObjs.put(parts.get(0), o2);
@@ -113,6 +114,7 @@
message.setContent(List.class, newObjs);
} catch (Exception e) {
+ e.printStackTrace();
throw new Fault(e);
}
@@ -136,4 +138,36 @@
lst.add(null);
}
}
+
+ private WrapperHelper createWrapperHelper(WrapperCapableDatabinding dataBinding,
+ MessageInfo messageInfo,
+ MessageInfo wrappedMessageInfo,
+ Class<?> wrapperClass) {
+ List<String> partNames = new ArrayList<String>();
+ List<String> elTypeNames = new ArrayList<String>();
+ List<Class<?>> partClasses = new ArrayList<Class<?>>();
+
+ for (MessagePartInfo p : messageInfo.getMessageParts()) {
+ ensureSize(partNames, p.getIndex());
+ ensureSize(elTypeNames, p.getIndex());
+ ensureSize(partClasses, p.getIndex());
+
+ partNames.set(p.getIndex(), p.getName().getLocalPart());
+
+ String elementType = null;
+ if (p.getTypeQName() == null) {
+ // handling anonymous complex type
+ elementType = null;
+ } else {
+ elementType = p.getTypeQName().getLocalPart();
+ }
+
+ elTypeNames.set(p.getIndex(), elementType);
+ partClasses.set(p.getIndex(), p.getTypeClass());
+ }
+ return dataBinding.createWrapperHelper(wrapperClass,
+ partNames,
+ elTypeNames,
+ partClasses);
+ }
}
Modified: cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java?rev=755184&r1=755183&r2=755184&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java (original)
+++ cxf/branches/2.1.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java Tue Mar 17 10:50:22 2009
@@ -27,7 +27,8 @@
import javax.xml.bind.Marshaller;
import org.apache.cxf.BusFactory;
-import org.apache.cxf.jaxws.interceptors.WrapperHelper;
+import org.apache.cxf.databinding.WrapperHelper;
+import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.service.AddNumbersImpl;
import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
@@ -69,7 +70,7 @@
String className = requestClass.getName();
className = className.substring(0, className.lastIndexOf(".") + 1);
- WrapperHelper wh = WrapperHelper.createWrapperHelper(requestClass,
+ WrapperHelper wh = new JAXBDataBinding().createWrapperHelper(requestClass,
partNames, elTypeNames, partClasses);
List<Object> paraList = new ArrayList<Object>();
@@ -88,7 +89,7 @@
className = responseClass.getName();
className = className.substring(0, className.lastIndexOf(".") + 1);
- wh = WrapperHelper.createWrapperHelper(responseClass,
+ wh = new JAXBDataBinding().createWrapperHelper(responseClass,
partNames, elTypeNames, partClasses);
List<Object> resPara = new ArrayList<Object>();
List<Integer> intValueList = new ArrayList<Integer>();