View Javadoc

1   package org.codehaus.xfire.xmpp;
2   
3   import org.codehaus.xfire.MessageContext;
4   import org.codehaus.xfire.fault.XFireFault;
5   import org.codehaus.xfire.handler.AbstractHandler;
6   import org.jivesoftware.smack.packet.XMPPError;
7   
8   /***
9    * Creates fault information for the response packet.
10   * 
11   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
12   */
13  public class XMPPFaultHandler
14      extends AbstractHandler
15  {
16      public static final String XMPP_ERROR = "xfire.xmppError";
17  
18      /***
19       * @param e
20       * @param context
21       * @throws Exception
22       */
23      public void invoke(MessageContext context)
24      {
25          /***
26           * From the JEP-0076 spec:
27           * _SOAP Error_             _HTTP Code_  _IQ Error Description_
28           * env:VersionMismatch      500          <internal-server-error/>
29           * env:MustUnderstand       500          <internal-server-error/>
30           * env:Sender               400          <bad-request/>
31           * env:Receiver             500          <internal-server-error/>
32           * env:DataEncodingUnknown  500          <internal-server-error/>
33           */
34  
35          XFireFault fault = (XFireFault) context.getExchange().getFaultMessage().getBody();
36          XMPPError error = null;
37          if (fault.getFaultCode().equals(XFireFault.SENDER))
38          {
39              error = new XMPPError(400);
40          }
41          else
42          {
43              error = new XMPPError(500);
44          }
45          
46          context.setProperty(XMPP_ERROR, error);
47      }
48  }