[ 
https://issues.apache.org/jira/browse/AXIS2-3651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12592251#action_12592251
 ] 

nadir amra commented on AXIS2-3651:
-----------------------------------

This seems like a reasonable fix and I want to do further testing but my 
initial tests look good.   Anyone have any feedback on this?  Just to 
summarize, if a simple POJO service such as 

public class WeatherService{
    Weather weather = new Weather();
    
    public void setWeather(Weather weather){
        this.weather = weather;
    }

    public Weather getWeather(){
        return this.weather;
    }
}

was deployed, the SOAP response that would be returned by the Axis 2 engine 
would be something like the following:

=====================
<getWeatherResponse xmlns:ns="http://service.pojo.sample";>
   <ns:return xmlns:ax21="http://data.pojo.sample/xsd";  
type="sample.pojo.data.Weather">
  <ax21:forecast>Sunny</ax21:forecast> 
  <ax21:howMuchRain>1.0</ax21:howMuchRain> 
  <ax21:rain>true</ax21:rain> 
  <ax21:temperature>9.5</ax21:temperature> 
  </ns:return>
  </getWeatherResponse>
======================

The above response has 2 problems: 
(1) "type" is missing xsi qualifier and namespace declaration for xsi
(2) "sample.pojo.data.Weather" is used instead of "ax21:Weather"

With the fix the response now looks like the following:
======================
<getWeatherResponse xmlns:ns="http://service.pojo.sample";>
  <ns:return xmlns:ax21="http://data.pojo.sample/xsd"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:type="ax21:Weather">
  <ax21:forecast>Sunny</ax21:forecast> 
  <ax21:howMuchRain>1.0</ax21:howMuchRain> 
  <ax21:rain>true</ax21:rain> 
  <ax21:temperature>9.5</ax21:temperature> 
  </ns:return>
  </getWeatherResponse>
=======================

I think it would have been beneficial to incude this in 1.4, but oh well...:-(

This fix should also knock some several related JIRAs....

> BeanUtil class should try and fill the xsi:type attribute with value from 
> type table before defaulting to class name
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-3651
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3651
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Improvement
>          Components: databinding
>    Affects Versions: 1.4, 1.3
>         Environment: Windows XP SP2, Java 6
>            Reporter: Aaron Gourley
>            Assignee: nadir amra
>            Priority: Minor
>
> Using the type table to fill the xsi:type attribute would help make it 
> possible to successfully validate SOAP response messages against the WSDL.  
> Although the class name approach may be sufficient for POJO services, it 
> provides meaningless information when other approaches are used.
> I suggest replacing the following lines of BeanUtil.java
>              // Added objectAttributes as a fix for issues AXIS2-2055 and 
> AXIS2-1899 to 
>             // support polymorphism in POJO approach.
>             // For some reason, using QName(Constants.XSI_NAMESPACE, "type", 
> "xsi") does not generate
>             // an xsi:type attribtue properly for inner objects. So just 
> using a simple QName("type").
>             ArrayList objectAttributes = new ArrayList();
>             objectAttributes.add(new QName("type"));
>             objectAttributes.add(beanObject.getClass().getName());
> With this (or similar ... not sure if qualified check should be there):
>             ArrayList objectAttributes = new ArrayList();
>             objectAttributes.add(new QName(Constants.XSI_NAMESPACE, "type", 
> "xsi"));
>             if( typeTable != null && qualified )
>             {
>                 QName qNamefortheType =
>                     
> typeTable.getQNamefortheType(beanObject.getClass().getName());
>                 if (qNamefortheType == null) {
>                     // Added objectAttributes as a fix for issues AXIS2-2055 
> and AXIS2-1899 to 
>                     // support polymorphism in POJO approach.
>                     objectAttributes.add(beanObject.getClass().getName());
>                 }
>                 else
>                 {
>                     objectAttributes.add(qNamefortheType);    
>                 }
>             }
>             else
>             {
>                 objectAttributes.add(beanObject.getClass().getName());
>             }
> Note that I had no issues with generating the xsi:type attribute for inner 
> elements in my testing (as was mentioned by the existing comment).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to