2011-06-13 43 views
1

这是第一次海报。我面临的问题是Java和XML。我面临的问题是,用户会向我们的系统发送VerifyAccount XML请求,并且根据发送的信息,我们的系统将验证该帐户,发送未注册的用户错误或无效的帐户错误。 我已经在代码上做了一些工作,我在XML模式中添加了一个元素,并且只有在请求中新创建的元素在xml中被解析时它才起作用。问题是我不想在XML请求中传递该元素,但是如果我排除该元素,则代码无法正常工作。Java/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中新添加的元素是detailedErrorMessage。

的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>[email protected]</UserID> 
     <Password>password</Password> 
    </Identification> 
    <Service> 
     <ServiceName>AccountVerify</ServiceName> 

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

即该请求,如果detailedErrorMesage元素被添加到该请求作为预期功能工作。我在这段代码中做错了什么?我一直在思考这个问题几天,它正在努力工作!

任何帮助将非常感谢! 谢谢

回答

0

如果我的理解正确,我认为你只需要在架构中将元素标记为可选。将minOccurs设置为0,并将maxOccurs设置为1以创建可选元素。

编辑:重读后,似乎如果你没有一个detailedErrorMessage,你的if块会抛出一个NullPointerException。当你连接一堆像这样的方法调用,其中任何一个都可以为null时,你就在玩火。在检查值之前验证每个孩子是否存在。

+0

当前minOccurs设置为0,maxOccurs未设置。我相信它应该设置为1作为默认值? – Sad 2011-06-13 17:22:31