2012-07-10 2 views
4

XML 형식으로 앞뒤로 호출하는 웹 서비스 프로그램에서 작업하고 있습니다. 그러나 내 문제는 그와 관련이 없습니다. 내 컴퓨터에서 로컬로 이클립스를 실행하면 작동하는 것 같다. 그러나 동료가 서버를 실행하려고하면 웹 서비스가 호출되기 전에이 예외가 발생합니다.Java - XMLGregorianCalendar 예외

ClientMain.java의 예외 # 6 java.lang.IllegalArgumentException : 2012-07 -09T08 : 19 : 44-0400

누군가가 한 컴퓨터에서 논쟁을하지만 다른 컴퓨터에서는 논쟁을 일으키는 이유를 알 수 있습니까? 빌드 전체가 이클립스 작업 공간을 썸 드라이브에 복사했기 때문에 빌드가 문제가되어서는 안됩니다. (관련된 모든 병과 빌드 경로가 이월되어야합니다.) 서버가 실행되는 한 전체 프로그램을 실행 가능한 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

+0

해당 정보를 추가했습니다. – ns1

+1

게시 된 코드와 출력간에 상관 관계가 없으므로 출력이 잘못된 것입니다. – aviad

답변

4

문제는 당신이 strRunType.substring(2,strRunType.length())에서 얻을 당신의 '날짜'날짜의 유효한 lexicalRepresentation되지 않는 것입니다.

XMLGregorianCalendar 개체로 구문 분석하려면 입력 값을 올바르게 형식화해야합니다.

날짜에 -04:00:이 누락되었다는 오류가 발생했습니다.

sRunType = sRunType.replaceAll("-0500", "-05:00"); 코드로 인해 알고 있어야하는 것은 무엇입니까? 4 대신 5를 사용하고 있다는 것을 제외하고는?

+0

그게 전부 였어. 감사! – ns1