1

XMLを受け取り、データベースに新しい本を作成する次のメソッドがあります。

@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);
    }
        ....................................................................
}

問題は、メッセージ本文で何も送信しないと、例外がスローされないことです。メッセージ本文が空かどうかを確認するにはどうすればよいですか?

ありがとう!

ソリン

4

3 に答える 3

0

これを試して:

public SuccessfulRequestMessage createBook(JAXBElement<Book> bookParam, 
                      @PathParam("isbn") String isbn) throws MyWebServiceException
于 2012-11-30T19:31:01.723 に答える
0

それJAXBElement自体はnullではないが、そのペイロードはnullである可能性があります。bookParam.getValue()だけでなくチェックしてくださいbookParam

于 2012-11-30T19:48:01.223 に答える
0

MediaType.APPLICATION_XMLを送信する代わりに、1 つのパラメーターのみで表されるapplication/x-www-form-urlencodedを送信すると、このパラメーターに XML コードが含まれます。次に、パラメーターが null か空かを確認できます。次に、パラメーターの内容から JAXBElement を作成します。コードは次のとおりです。

@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();
    }
于 2012-12-05T16:43:09.663 に答える