Java - XMLGregorianCalendar exception

I am working on a web services program that performs callbacks in the form of XML. However, this is not my problem. When I run this locally (in Eclipse) on my machine, it works. However, when my colleague runs it / if I try to run it on the server, it gets this exception before the web service is even called:

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

Does anyone have any idea why he accepts an argument on one machine and not another? Build should not be a problem, since I copied the entire eclipse workspace to thumbdrive (so all associated banks and the build path had to be ported). As for the server, I exported the entire program as an executable jar (Eclipse Indigo works) and got a similar problem.

I would be grateful for your understanding!

StackTrace / Exit:

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 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 

The method that throws the exception:

  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); } } 

Main class:

  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 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); } } 

output only:

 ****************************************************** Running by Yesterday 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
source share
1 answer

The problem is that your "date" that you get from strRunType.substring(2,strRunType.length()) is not a valid lexicalRepresentation date.

You need to get the correct formatting of your input value in order to parse it as an XMLGregorianCalendar object.

The error is that you are missing : at -04:00 on your date.

What should you have known because of the code sRunType = sRunType.replaceAll("-0500", "-05:00"); ... besides the fact that you used 5 instead of 4?

+4
source

All Articles