Проблема Java / XML запроса - PullRequest
1 голос
/ 13 июня 2011

Первый постер здесь. Проблема, с которой я сталкиваюсь, заключается в Java и XML. Проблема, с которой я столкнулся, заключается в том, что пользователь отправит запрос XML VerifyAccount в наши системы, и в зависимости от того, какая информация была отправлена, наша система проверит учетную запись, отправит ошибку незарегистрированного пользователя или ошибку неверной учетной записи. Я проделал некоторую работу над кодом, я добавил элемент в схему XML, и он работал, только если в запросе вновь созданный элемент был проанализирован в xml. Проблема в том, что я не хочу передавать этот элемент в запросах XML, но если я исключаю этот элемент, код не работает должным образом.

Функция Java:

    private String checkPersonID(String[] loginDetails, String serviceName, Connection conn, Element service) throws SQLException, JspException
    {
        assert loginDetails != null : "You need to set loginDetails before calling checkPersonID()";
        assert serviceName  != null : "You need to set serviceName before calling checkPersonID()";

        CallableStatement stmt = conn.prepareCall( "{call jspCheckPersonID (?)}" )

        try
        {
            stmt.setString(1, loginDetails[INDEX_USERNAME] );
            ResultSet rs = stmt.executeQuery();

            // Make sure this person is a valid user - if so return his personID, otherwise throw appropriate Exception
            if (serviceName.equals ("AccountVerify") && service.getChild("ServiceDetail").getChild("detailedErrorMesage").getText().equals ("true") && !rs.next())
            {
                throw new JspException( JspException.UNREGISTERED_ACCOUNT );
            }           
            else if ( rs.getRow() != 1 || !rs.getString("Password").trim().equalsIgnoreCase( loginDetails[INDEX_PASSWORD] ))
            {
                throw new JspException( JspException.INVALID_ACCOUNT );
            }

// code ommitted

Недавно добавленный элемент в XML - detailErrorMessage.

Запрос XML должен быть:

<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="--" Version="1.0">
    <Identification>
        <UserID>your.address@your.company</UserID>
        <Password>password</Password>
    </Identification>
    <Service>
        <ServiceName>AccountVerify</ServiceName>

        <ServiceDetail/>
    </Service>
</Request>

Это запрос, если в этот запрос добавлен элемент detailErrorMesage, функция работает как задумано. Что я делаю не так в этом коде? Я думал об этом в течение нескольких дней, и это заставляет меня задуматься!

Любая помощь будет очень ценится! Спасибо

1 Ответ

0 голосов
/ 13 июня 2011

Если я правильно понимаю, я думаю, вам просто нужно пометить элемент как необязательный в схеме.Установите minOccurs в 0 и maxOccurs в 1 для создания необязательного элемента.

EDIT: после перечитывания кажется, что если у вас нет подробного элемента ErrorMessage, ваш блок if вызовет исключение NullPointerException.Когда вы объединяете кучу вызовов методов, например, где любой из них может быть нулевым, вы играете с огнем.Прежде чем проверять значение, проверьте, существует ли каждый дочерний элемент.

...