5

私は、XML 形式で呼び出しを行う Web サービス プログラムに取り組んでいます。しかし、私の問題はそれではありません。これを自分のマシンでローカルに (Eclipse で) 実行すると、うまくいくようです。ただし、同僚がそれを実行するとき/サーバーで実行しようとすると、Web サービスが呼び出される前にこの例外が発生します。

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
4

1 に答える 1

5

問題は、取得した「日付」がstrRunType.substring(2,strRunType.length())有効なlexicalRepresentation日付ではないことです。

オブジェクトとして解析するには、入力値を正しくフォーマットする必要がありXMLGregorianCalendarます。

:エラーは、日付にが欠落しているということです-04:00

sRunType = sRunType.replaceAll("-0500", "-05:00");4 の代わりに 5 を使用していたことを除いて、コードのためにどれを認識していたに違いありませんか?

于 2012-07-10T13:49:41.103 に答える