Hi,

I'm using Axiom method to sendReceive a list.
In fact, at the client level I call the server via a web service to get a
list of user :

Client :

public static List<UserLite> getUserList(String login, char[] password)
throws PapoException {
       EndpointReference targetEPR =3D new EndpointReference(baseUrl +
CoreVariables.APPLICATION_WEBSERVICE);
       OMFactory fac =3D OMAbstractFactory.getOMFactory();
       OMNamespace omNs =3D fac.createOMNamespace("
http://webservices.papo/xsd";, "tns");

       OMElement method =3D fac.createOMElement("getUserList", omNs);

       OMElement loginElement =3D fac.createOMElement("login", omNs);
       loginElement.addChild(fac.createOMText(loginElement, login));
       method.addChild(loginElement);

       OMElement passwordElement =3D fac.createOMElement("password", omNs)=
;
       passwordElement.addChild(fac.createOMText(passwordElement, new
String(password)));
       method.addChild(passwordElement);
       Options options =3D new Options();
       options.setTo(targetEPR);
       options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

       try {
           ServiceClient sender =3D new ServiceClient();
           sender.setOptions(options);
           OMElement result =3D sender.sendReceive(method);
           OMElement firstElement =3D result.getFirstElement();
           if(firstElement.getLocalName().equals("message")) {
               throw new PapoException(firstElement.getText());
           }
           else {
               OMElement userList =3D result.getFirstElement();
               if (!userList.getText().equals("UserList")) {
                   throw new PapoException("The xml receive is different
from what expected. Unknown server response!!");
               }

               userList.getChildElements();
               OMElement firstNameElement =3D
(OMElement)loginElement.getNextOMSibling();
               String firstName =3D firstNameElement.getText();

               OMElement lastNameElement =3D
(OMElement)firstElement.getNextOMSibling();
               String lastName =3D lastNameElement.getText();

               OMElement emailElement =3D
(OMElement)lastNameElement.getNextOMSibling();
               String email =3D emailElement.getText();

               MainUser user =3D new MainUser(login);
               user.setFirstName(firstName);
               user.setLastName(lastName);
               user.setEmail(email);

               return new ArrayList();

           }
       }
       catch (AxisFault af) {
           af.printStackTrace();
           throw new PapoException(af.getMessage(), af);
       }

   }

I have a ClassCastException for this line : OMElement result =3D
sender.sendReceive(method);

The web service is :

public OMElement getUserList(OMElement element) throws XMLStreamException {
  // Something that get a user object
  if (user !=3D null) {
     ApplicationServiceImpl asi =3D new ApplicationServiceImpl();

     try {
       // <UserList>
       OMElement userListElement =3D fac.createOMElement("UserList", omNs)=
;
       UserList userList =3D asi.getUserList();
       for (int i =3D 0; i < userList.getUserList().size(); i++) {
         UserLite userLite =3D userList.getUserList().get(i);
         // <User>
         OMElement userElement =3D fac.createOMElement("User", omNs);


         // <login>String</login>
         loginElement =3D fac.createOMElement("login", omNs);
         loginElement.addChild(fac.createOMText(loginElement,
userLite.getLogin()));
         userElement.addChild(loginElement);

         // <status>boolean</status>
         OMElement statusElement =3D fac.createOMElement("status", omNs);
         statusElement.addChild(fac.createOMText(statusElement,
userLite.isAlive()));
         userElement.addChild(statusElement);

         // <ip>String</ip>
         OMElement ipElement =3D fac.createOMElement("ip", omNs);
         ipElement.addChild(fac.createOMText(ipElement, userLite.getLastIP
()));
         userElement.addChild(ipElement);

         // <lastUpdate>Date.toString</lastUpdate>
         OMElement lastUpdateElement =3D fac.createOMElement("lastUpdate",
omNs);
         lastUpdateElement.addChild(fac.createOMText(lastUpdateElement,
userLite.getLastUpdate()));
         userElement.addChild(lastUpdateElement);

         // </User>
         userListElement.addChild(userElement);
       }
       logger.debug("\tListe des utilisateurs cr=E9=E9 sous forme de messa=
ge.
");
       // </UserList>
       method.addChild(userListElement);
     }
     catch (PapoException pe) {
       OMElement message =3D fac.createOMElement("errorMessage", omNs);
       message.addChild(fac.createOMText(message, "Unable to get the
refreshed user list! Try again later or check the server status"));
       method.addChild(message);
     }
   }
   else {
     OMElement message =3D fac.createOMElement("errorMessage", omNs);
     message.addChild(fac.createOMText(message, "Unable to get the
refreshed user list! Try again later or check the server status"));
     method.addChild(message);
   }
   return method;
 }

In debugging mode, this last code is executed normally and completely
without any error (when the client call it). I logged the list and it is ok=
,
then it is send to the client as expected...

What is strange is I used exactly the same king of code to authenticate a
user and receive a complete user object. The soap message should have this
kind of structure :

<UserList>
 <User>
   <login>test1</login>
   <status>ONLINE</status>
   <ip>127.0.0.1</ip>
   <lastUpdate></lastUpdate>
 </User>
 <User>
   <login>test2</login>
   <status>ONLINE</status>
   <ip>127.0.0.1</ip>
   <lastUpdate></lastUpdate>
 </User>
...
</UserList>

So, why this ClassCastException ?

Thanks!

-- 
Michael Bernagou
Java Developper

Reply via email to