2016-12-21 1 views
0

필자가 제어 할 수없는 SOAP 웹 서비스 API를 사용해야합니다. 나는 아파치 Axis2를 사용하여 자바 클래스 (WSDL로부터)와 Axis2 use'java.util.Calendar '를 날짜 데이터 형으로 생성했다.Apache Axis 2에서 TimeZone이없는 Java Calendar

여기서 문제는 TimeZone 2016-12-31T12:00:00.000+06:30에서 날짜 시간을 인식하지 못하기 때문에 Axis2가이를 String으로 구문 분석하고 요청을 보낼 때입니다. 이 API는 형식이 2016-12-31T12:00:00임을 압니다. calendar.clear(Calendar.ZONE_OFFSET); 시도했지만 여전히 XML 요청 TimeZone을 렌더링합니다. 필자는 Calendar 대신 XMLGregorianCalendar으로 테스트를 실시했지만 작동했지만 캘린더 데이터 유형을 생성 된 클래스에서 XMLGregorianCalendar으로 변경해야했습니다. 새로운 WSDL 버전이 있고 새 클래스를 다시 생성하면 변경 될 수 있습니다.

아이디어가 있으십니까? 미리 감사드립니다.

답변

0

답변은 this에서 발견되었지만 첫 번째 대답에서는 발견되지 않았습니다. 나는 을 확장하여 org.apache.axis2.databinding.utils.ConverterUtil을 확장하고 appendTimeZone() 메서드 호출을 제거하여 convertToString(Calendar value)에 문제 (Michał Niklas의 대답과 같이)를 해결했습니다. 또한 appendTime(Calendar value, StringBuffer dateString) 방법을 변경해야했습니다. 내 CustomConverterUtils는 다음과 같습니다.

public class CustomeConverterUtils extends ConverterUtil { 

    public static String convertToString(Calendar value) { 
       if (value.get(Calendar.ZONE_OFFSET) == -1){ 
        value.setTimeZone(TimeZone.getDefault()); 
       } 
       StringBuffer dateString = new StringBuffer(28); 
       appendDate(dateString, value); 
       dateString.append("T"); 
       //adding hours 
       appendTime(value, dateString); 

       return dateString.toString(); 
     } 

     public static void appendTime(Calendar value, StringBuffer dateString) { 
      if (value.get(Calendar.HOUR_OF_DAY) < 10) { 
       dateString.append("0"); 
      } 
      dateString.append(value.get(Calendar.HOUR_OF_DAY)).append(":"); 
      if (value.get(Calendar.MINUTE) < 10) { 
       dateString.append("0"); 
      } 
      dateString.append(value.get(Calendar.MINUTE)).append(":"); 
      if (value.get(Calendar.SECOND) < 10) { 
       dateString.append("0"); 
      } 
      dateString.append(value.get(Calendar.SECOND)); 
     } 
} 

그리고 이러한 코드도 입력해야합니다. Spring Boot를 사용할 때 Application 클래스에 넣어야했습니다.

public static void main(String[] args) throws Exception { 
    String convert_class = "com.ykkh.test.CustomeConverterUtils"; 
    System.setProperty(ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, convert_class); 
    SpringApplication.run(Application.class, args); 
    } 
관련 문제