2012-07-10 85 views
4

我正在研究以XML形式来回调用Web服务程序。然而,我的问题不在于此。当我在我的机器上本地运行(在Eclipse中)时,它似乎工作。然而,当我的同事运行它/如果我试图在服务器上运行它,他甚至会在Web服务被调用之前得到此异常:Java - XMLGregorianCalendar异常

ClientMain.java中的异常#6 java.lang.IllegalArgumentException:2012-07 -09T08:19:44-0400

有没有人有任何想法为什么它需要在一台机器上的参数,而不是另一台?构建不应该成为问题,因为我将我的整个Eclipse工作区复制到了一个拇指驱动器上(因此所有关联的jar和构建路径都应该继续)。就服务器运行而言,我将整个程序作为可运行的jar(运行Eclipse Indigo)导出,并得到类似的问题。

我会很感激任何见解!

堆栈跟踪/输出:

java.lang.IllegalArgumentException: 2012-07-09T09:19:42-0400 
     at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl$Parser.skip(Unknown Source) 
     at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl$Parser.parse(Unknown Source) 
     at com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl.<init>(Unknown Source) 
     at com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl.newXMLGregorianCalendar(Unknown Source) 
     at com.travelport.worldspanimageserver.client.ClientMain.requestRun(ClientMain.java:231)****************************************************** 
Running by Yesterday's Date ... 
2012-07-09T09:19:42-0400 
Current date being used is 2012-07-09T09:19:42-0400 
Exception #6 in ClientMain.java java.lang.IllegalArgumentException: 2012-07-09T09:19:42-0400 

     at com.travelport.worldspanimageserver.client.ClientMain.runTypeCheck(ClientMain.java:161) 
     at com.travelport.worldspanimageserver.client.ClientMain.main(ClientMain.java:81) 
Exception #13 in ClientMain.java java.lang.NullPointerException 

方法造成例外:

import java.text.DateFormat; 
    import java.text.SimpleDateFormat; 
    import java.util.Calendar; 
    import java.util.Date; 
    import java.util.GregorianCalendar; 
    import java.util.List; 
    import java.util.Properties; 
    import java.util.TimeZone; 

    import javax.mail.Message; 
    import javax.mail.Session; 
    import javax.mail.Transport; 
    import javax.mail.internet.InternetAddress; 
    import javax.mail.internet.MimeMessage; 
    import javax.swing.text.Document; 
    import javax.xml.datatype.DatatypeConfigurationException; 
    import javax.xml.datatype.DatatypeFactory; 
    import javax.xml.datatype.XMLGregorianCalendar; 

    import org.joda.time.format.DateTimeFormatter; 
    import org.joda.time.format.ISODateTimeFormat; 

     public static void requestRun(String strRunType) throws DatatypeConfigurationException{ 
       //-TODO: determine how date is passed in/retrieved from database   
       GregorianCalendar c = new GregorianCalendar(); 

       XMLGregorianCalendar dateTime = null; 

       if (strRunType == "fullLoad") {dateTime = null;} 
       if (strRunType.substring(0,2).equals("OD")) 
       { 
        System.out.println("Current date being used is " + DatatypeFactory.newInstance().newXMLGregorianCalendar(strRunType.substring(2,strRunType.length()))); 
        dateTime = DatatypeFactory.newInstance().newXMLGregorianCalendar(strRunType.substring(2,strRunType.length())); 
       } 
       if (strRunType.substring(0,2).equals("DT")) 
       { 
        System.out.println("Current date being used is " + strRunType.substring(2,strRunType.length()));   
        dateTime = DatatypeFactory.newInstance().newXMLGregorianCalendar(strRunType.substring(2,strRunType.length())); 
       } 

String address = "http://vhligssas001:31860/services/ImageViewerService"; /**getServiceURL(sServer);**/ 

      try 
      { 
       ArrayList<PropertyType> propertyIdList = null;           
       ArrayList tempList = null; 

       if (strRunType.equals("properties")) 
       { 
        propertyIdList = getPropertiesFromFile(); //to fix later    
       } 
       else 
       { 
        propertyIdList = initialCall(dateTime, propertyIdList, address); 
       } 

       secondCall(propertyIdList, address); 

      } 
      catch(Exception e) 
      { 
       System.out.println("Exception #5 in ClientMain.java " + e); 
       try 
       { 
       postMail("Exception #5 in ClientMain.java " + e); 
       } 
       catch (Exception e1) 
       { 
        e1.printStackTrace(); 
       } 
       System.exit(16); 
      } 
     } 
     catch(Exception e) 
     { 
      System.out.println("Exception #6 in ClientMain.java " + e); 
      try 
      { 
      postMail("Exception #6 in ClientMain.java " + e); 
       e.printStackTrace(); //added 

      } 
      catch (Exception e1) 
      { 
      e1.printStackTrace(); 
      } 
      System.exit(16); 
     }   
    } 

主类:

public static void main(String args[]) throws Exception 
     { 
      String sRunType = new String(""); 
     try 
      {  
       File fPropertiesToLoad = new File("runType.txt"); 
       BufferedReader in = null; 
       String strRunType = new String(""); 

       if (!fPropertiesToLoad.exists()) 
       {   
        System.out.println("******************************************************"); 
        System.out.println("Exception #1 - Run Type file does not exist"); 
        System.out.println("******************************************************"); 
        postMail("Exception #1 - Run Type file does not exist"); 
        System.exit(16); 
       }   
       else 
       { 
        in = new BufferedReader(new FileReader("runType.txt")); 
        if ((strRunType = in.readLine()) != null) 
        { 
         sRunType = strRunType.trim(); 
        } 
        in.close();  
        runTypeCheck(sRunType); 
       } 
      }   
      catch (Exception e) 
      { 
       System.out.println("Exception #2 in ClientMain.java " + e); 
       postMail("Exception #2 in ClientMain.java " + e); 
       System.exit(16); 
      } 
     }  

runTypeCheck:

public static void runTypeCheck(String sRunType) 
     { 
      try 
      { 
      //Hard-coded in "yesterday" as the date 
      sRunType = "DT"; 

      System.out.println("******************************************************"); 
      DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis(); 

      if (sRunType.equals("DT")) 
      { 
       System.out.println("Running by Yesterday's Date ..."); 
       Calendar cal = Calendar.getInstance(); 
       cal.add(Calendar.DATE, -1); 
       DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
       sRunType = dateFormat.format(cal.getTime()); 
       System.out.println(sRunType); 
       sRunType = sRunType.replaceAll("-0500", "-05:00"); 
       sRunType = "DT" + sRunType; 
       requestRun(sRunType); 
      } 
System.out.println("******************************************************"); 

     } 
     catch(Exception e) 
     { 
      System.out.println("Exception #4 in ClientMain.java " + e); 
      try 
      { 
       postMail("Exception #4 in ClientMain.java " + e); 
      } 
      catch (Exception e1) 
      { 
       e1.printStackTrace(); 
      } 
      System.exit(16); 
     } 
    } 

只能输出:

****************************************************** 

Running by Yesterday's Date ... 

2012-07-09T08:19:44-0400 

Current date being used is 2012-07-09T08:19:44-0400 

Exception #6 in ClientMain.java java.lang.IllegalArgumentException: 2012-07-09T08:19:44-0400 
+0

您的异常引用'ClientMain.java',但您尚未提供该代码。 – Brad 2012-07-10 12:53:17

+0

添加了该信息。 – ns1 2012-07-10 13:03:51

+1

由于发布的代码和输出之间没有关联,所以输出具有误导性。 – aviad 2012-07-10 13:06:53

回答

4

的问题是,你从strRunType.substring(2,strRunType.length())得到你的“日期”不是日期的有效lexicalRepresentation

您需要正确格式化输入值才能解析为XMLGregorianCalendar对象。

错误在于您在日期的-04:00中缺少:

你一定知道这是因为sRunType = sRunType.replaceAll("-0500", "-05:00");代码......除了你用的是5而不是4吗?

+0

就是这样。谢谢! – ns1 2012-07-10 17:14:50