2012-11-30 4 views
1

je la méthode suivante, qui reçoit XML et crée un nouveau livre dans la base de données:Vérifiez si le paramètre JAXBElement est nul

@PUT 
@Path("/{isbn}") 
@Consumes(MediaType.APPLICATION_XML) 
@Produces(MediaType.APPLICATION_XML) 
public SuccessfulRequestMessage createBook(JAXBElement<Book> bookParam, 
     @PathParam("isbn") String isbn) { 

    if(bookParam == null) 
    { 
     ErrorMessage errorMessage = new ErrorMessage(
       "400 Bad request", 
       "To create a new book you must provide the corresponding XML code!"); 
     throw new MyWebServiceException(Response.Status.BAD_REQUEST, 
       errorMessage); 
    } 
     .................................................................... 
} 

Le problème est que quand je n'envoie rien dans le corps du message, l'exception n'est pas levée. Comment puis-je vérifier si le corps du message est vide?

Merci!

Sorin

+0

Vous souhaitez obtenir un message d'erreur du côté client ou côté serveur ?? – bhuang3

+0

du côté serveur –

Répondre

0

j'ai découvert une petite astuce qui peut être fait: au lieu d'envoyer MediaType.APPLICATION_XML, j'envoie représenté par un seul paramètre l'application/x-www-form-urlencoded, et ce paramètre contiendra le code XML. Ensuite, je peux vérifier si le paramètre est nul ou vide. Puis, à partir du contenu du paramètre, je construis un JAXBElement. Le code est le suivant:

@PUT 
@Path("/{isbn}") 
@Consumes("application/x-www-form-urlencoded") 
@Produces(MediaType.APPLICATION_XML) 
public SuccessfulRequestMessage createBook(@FormParam("code") String code, 
     @PathParam("isbn") String isbn) throws MyWebServiceException { 

    if(code == null || code.length() == 0) 
    { 
     ErrorMessage errorMessage = new ErrorMessage("400 Bad request", 
       "Please provide the values for the book you want to create!"); 
     throw new MyWebServiceException(Response.Status.BAD_REQUEST, 
       errorMessage); 
    } 

    //create the JAXBElement corresponding to the XML code from inside the string 
    JAXBContext jc = null; 
    Unmarshaller unmarshaller; 
    JAXBElement<Book> jaxbElementBook = null; 
    try { 
     jc = JAXBContext.newInstance(Book.class); 
     unmarshaller = jc.createUnmarshaller(); 
     StreamSource source = new StreamSource(new StringReader(code)); 
     jaxbElementBook = unmarshaller.unmarshal(source, Book.class); 
    } catch (JAXBException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } 
0

Essayez ceci:

public SuccessfulRequestMessage createBook(JAXBElement<Book> bookParam, 
         @PathParam("isbn") String isbn) throws MyWebServiceException 
+0

ne fonctionne pas ... –

0

Il se peut que le JAXBElement lui-même est non nulle mais sa charge utile est. Vérifiez bookParam.getValue() ainsi que juste bookParam.

+0

ne fonctionne pas ... j'ai également essayé avec bookParam.isNil() –

+1

@SorinAdrianCarbunaru êtes-vous sûr que la méthode est appelée du tout? Imprimez un message de journal ou quelque chose en haut de la méthode pour vérifier cela. [Cet article de blog] (http://theholyjava.wordpress.com/2012/01/31/troubleshooting-jersey-rest-server-and-client/) donne plus de conseils sur la façon de déboguer les choses et de déterminer exactement comment maillot traite une demande particulière. –

+0

il semble que lorsque le corps du message http est vide, rien de l'intérieur de cette méthode ne sera exécuté ... Je pense que je devrais seulement vérifier si le client envoie quelque chose –

Questions connexes