cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: svn commit: r751576 - in /cxf/trunk/rt: databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/ frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/
Date Tue, 10 Mar 2009 01:58:40 GMT
Hi Dan,

I test the code with Systest and my xmlbeans sample with the ASM jar.
All tests passed.
Anyway, I will add the below part in the WrapperHelper, it make sense to
skip the ASM class enhancement part for the XMLBeans.

Thanks,

Willem

Daniel Kulp wrote:
> Willem,
> 
> I noticed that this updates the ReflectWrapperHelper, but didn't touch the ASM 
> compiled version?   Did you test this with ASM available on the classpath?
> 
> Updating the ASM compiled version will probably suck.  My suggestion would be 
> to update the createWrapperHelper method to do:
> if (!wrapperType.isInterface()) {
>     compile.....
> } 
> and allow the interface code to just fall down into the Reflection form.
> 
> Dan
> 
> 
> 
> On Sun March 8 2009 10:48:03 pm ningjiang@apache.org wrote:
>> Author: ningjiang
>> Date: Mon Mar  9 02:48:02 2009
>> New Revision: 751576
>>
>> URL: http://svn.apache.org/viewvc?rev=751576&view=rev
>> Log:
>> CXF-2076 get CXF work with the XMLBeans wrapper objects
>>
>> Modified:
>>    
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aReaderImpl.java
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aWriterImpl.java
>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors
>> /WrapperHelper.java
>>
>> Modified:
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aReaderImpl.java URL:
>> http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/jav
>> a/org/apache/cxf/xmlbeans/DataReaderImpl.java?rev=751576&r1=751575&r2=751576
>> &view=diff
>> ===========================================================================
>> === ---
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aReaderImpl.java (original) +++
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aReaderImpl.java Mon Mar  9 02:48:02 2009 @@ -70,7 +70,7 @@
>>                  try {
>>                      SchemaType st =
>> (SchemaType)part.getProperty(SchemaType.class.getName()); XmlOptions
>> options = new XmlOptions();
>> -                    if (!st.isDocumentType() && !isOutClass) {
>> +                    if (st != null && !st.isDocumentType() && !isOutClass)
>> { options.setLoadReplaceDocumentElement(null); }
>>                      Method meth = c.getMethod("parse",
>> XMLStreamReader.class, XmlOptions.class); @@ -124,7 +124,7 @@
>>          return obj;
>>      }
>>
>> -    public Object read(QName name, XMLStreamReader input, Class type) {
>> +    public Object read(QName name, XMLStreamReader input, Class type) {
>>          return null;
>>      }
>>
>>
>> Modified:
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aWriterImpl.java URL:
>> http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/jav
>> a/org/apache/cxf/xmlbeans/DataWriterImpl.java?rev=751576&r1=751575&r2=751576
>> &view=diff
>> ===========================================================================
>> === ---
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aWriterImpl.java (original) +++
>> cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/Dat
>> aWriterImpl.java Mon Mar  9 02:48:02 2009 @@ -94,7 +94,7 @@
>>                  }
>>                  SchemaType st =
>> (SchemaType)part.getProperty(SchemaType.class.getName());
>>
>> -                if (!st.isDocumentType()) {
>> +                if (st != null && !st.isDocumentType()) {
>>                      if
>> (StringUtils.isEmpty(part.getConcreteName().getNamespaceURI())) {
>> output.writeStartElement(part.getConcreteName().getLocalPart());
>>
>>
>> Modified:
>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors
>> /WrapperHelper.java URL:
>> http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/
>> apache/cxf/jaxws/interceptors/WrapperHelper.java?rev=751576&r1=751575&r2=751
>> 576&view=diff
>> ===========================================================================
>> === ---
>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors
>> /WrapperHelper.java (original) +++
>> cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors
>> /WrapperHelper.java Mon Mar  9 02:48:02 2009 @@ -45,10 +45,48 @@
>>
>>      public abstract String getSignature();
>>
>> +    private static Class<?> getXMLBeansValueType(Class<?> wrapperType)
 {
>> +        Class<?> result = wrapperType;
>> +        for (Method method : wrapperType.getMethods()) {
>> +            if (method.getName().startsWith("addNew")) {
>> +                result = method.getReturnType();
>> +                break;
>> +            }
>> +        }
>> +        return result;
>> +    }
>> +
>> +    private static Object createXMLBeansValueObject(Class<?> wrapperType)
>> +        throws SecurityException, NoSuchMethodException,
>> IllegalArgumentException, +            IllegalAccessException,
>> InvocationTargetException {
>> +
>> +        Class<?> cls[] = wrapperType.getDeclaredClasses();
>> +        Method newType = null;
>> +        for (Method method : wrapperType.getMethods()) {
>> +            if (method.getName().startsWith("addNew")) {
>> +                newType = method;
>> +            }
>> +        }
>> +        Object obj = null;
>> +        for (Class<?> c : cls) {
>> +            if ("Factory".equals(c.getSimpleName())) {
>> +                Method method = c.getMethod("newInstance", NO_PARAMS);
>> +                // create the instance of document type
>> +                obj = method.invoke(null, NO_PARAMS);
>> +                // create the value object
>> +                obj = newType.invoke(obj, NO_PARAMS);
>> +                break;
>> +            }
>> +        }
>> +
>> +        return obj;
>> +    }
>> +
>>      public static 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()); @@ -78,7 +116,7 @@
>>          }
>>
>>          for (int x = 0; x < partNames.size(); x++) {
>> -            String partName = partNames.get(x);
>> +            String partName = partNames.get(x);
>>              if (partName == null) {
>>                  getMethods.add(null);
>>                  setMethods.add(null);
>> @@ -93,13 +131,18 @@
>>              String setAccessor = JAXBUtils.nameToIdentifier(partName,
>> JAXBUtils.IdentifierType.SETTER); Method getMethod = null;
>>              Method setMethod = null;
>> -            try {
>> -                getMethod = wrapperType.getMethod(getAccessor, NO_PARAMS);
>> +            Class<?> valueClass = wrapperType;
>> +            try {
>> +                if (wrapperType.isInterface()) {
>> +                    valueClass = getXMLBeansValueType(wrapperType);
>> +                    allMethods = valueClass.getMethods();
>> +                }
>> +                getMethod = valueClass.getMethod(getAccessor, NO_PARAMS);
>>              } catch (NoSuchMethodException ex) {
>>                  //ignore for now
>>              }
>>
>> -            Field elField = getElField(partName, wrapperType);
>> +            Field elField = getElField(partName, valueClass);
>>              if (getMethod == null
>>                  && elementType != null
>>                  && "boolean".equals(elementType.toLowerCase())
>> @@ -118,10 +161,10 @@
>>                  && "return".equals(partName)) {
>>                  //RI generated code uses this
>>                  try {
>> -                    getMethod = wrapperType.getMethod("get_return",
>> NO_PARAMS); +                    getMethod =
>> valueClass.getMethod("get_return", NO_PARAMS); } catch
>> (NoSuchMethodException ex) {
>>                      try {
>> -                        getMethod = wrapperType.getMethod("is_return",
>> +                        getMethod = valueClass.getMethod("is_return",
>>                                                            new Class[0]);
>>                      } catch (NoSuchMethodException ex2) {
>>                          //ignore for now
>> @@ -204,7 +247,7 @@
>>          if
>> ("javax.xml.bind.JAXBElement".equals(method.getReturnType().getCanonicalNam
>> e())) { JAXBElement je = (JAXBElement)method.invoke(in);
>>              return je == null ? je : je.getValue();
>> -        } else {
>> +        } else {
>>              return method.invoke(in);
>>          }
>>      }
>> @@ -272,10 +315,13 @@
>>          }
>>          public Object createWrapperObject(List<?> lst)
>>              throws Fault {
>> -
>>              try {
>> -                Object ret = wrapperType.newInstance();
>> -
>> +                Object value = null;
>> +                if (wrapperType.isInterface()) {
>> +                    value = createXMLBeansValueObject(wrapperType);
>> +                } else {
>> +                    value = wrapperType.newInstance();
>> +                }
>>                  for (int x = 0; x < setMethods.length; x++) {
>>                      if (getMethods[x] == null
>>                          && setMethods[x] == null
>> @@ -289,38 +335,46 @@
>>                          o = jaxbObjectMethods[x].invoke(objectFactory, o);
>>                      }
>>                      if (o instanceof List) {
>> -                        List<Object> col =
>> CastUtils.cast((List)getMethods[x].invoke(ret)); +                       
>> List<Object> col = CastUtils.cast((List)getMethods[x].invoke(value)); if
>> (col == null) {
>>                              //broken generated java wrappers
>>                              if (setMethods[x] != null) {
>> -                                setMethods[x].invoke(ret, o);
>> +                                setMethods[x].invoke(value, o);
>>                              } else {
>> -                                fields[x].set(ret, lst.get(x));
>> +                                fields[x].set(value, lst.get(x));
>>                              }
>>                          } else {
>>                              List<Object> olst = CastUtils.cast((List)o);
>>                              col.addAll(olst);
>>                          }
>> -                    } else if (setMethods[x] != null) {
>> -                        setMethods[x].invoke(ret, o);
>> +                    } else if (setMethods[x] != null) {
>> +                        setMethods[x].invoke(value, o);
>>                      } else if (fields[x] != null) {
>> -                        fields[x].set(ret, lst.get(x));
>> +                        fields[x].set(value, lst.get(x));
>>                      }
>>                  }
>> -                return ret;
>> +                return value;
>>              } catch (Exception ex) {
>>                  throw new Fault(ex);
>>              }
>>          }
>>
>>          public List<Object> getWrapperParts(Object o) throws Fault {
>> +            Object valueObject = o;
>>              try {
>> +                if (wrapperType.isInterface()) {
>> +                    Class<?> valueClass =
>> getXMLBeansValueType(wrapperType); +                    // we need get the
>> real Object first
>> +                    Method method = wrapperType.getMethod("get" +
>> valueClass.getSimpleName(), NO_PARAMS); +                    valueObject =
>> method.invoke(o, NO_PARAMS);
>> +                }
>> +
>>                  List<Object> ret = new
>> ArrayList<Object>(getMethods.length); for (int x = 0; x <
>> getMethods.length; x++) {
>>                      if (getMethods[x] != null) {
>> -                        ret.add(getValue(getMethods[x], o));
>> +                        ret.add(getValue(getMethods[x], valueObject));
>>                      } else if (fields[x] != null) {
>> -                        ret.add(fields[x].get(o));
>> +                        ret.add(fields[x].get(valueObject));
>>                      } else {
>>                          //placeholder
>>                          ret.add(null);
> 


Mime
View raw message