2012-06-19 14 views
21

मुझे जैक्स-डब्ल्यूएस के माध्यम से एक ईजेबी सेवा परत का खुलासा करना है।दिनांक के अनुसार XmlGregorian कैलेंडर को कैसे प्रतिस्थापित करें?

मैंने जैक्स-डब्ल्यूएस और wsimport का उपयोग कर वेब सेवा जेनरेट की है लेकिन मुझे एक अजीब चीज़ों से रोक दिया गया है; XmlGregorian कैलेंडर में दिनांक मैप किया जा रहा है। क्या क्लासिक जावा तिथि का उपयोग करना संभव है? क्या आप मुझे आगे बढ़ने का सही तरीका दिखा सकते हैं?

धन्यवाद। संपादित करें: यह बाध्यकारी फ़ाइल मैंने उपयोग की: धन्यवाद, मैंने थोड़ा एक्सएमएल संशोधित किया और नेटबीन के साथ इसे ग्राहक के webservice से जोड़ा और यह काम किया। यह बाध्यकारी मैंने उपयोग किया:

<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema" 
       xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 

           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 

           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 

           xmlns:xsd="http://www.w3.org/2001/XMLSchema" wsdlLocation="../wsdl/localhost_8080/web_test/Testor.wsdl" > 


<jaxb:globalBindings> 
      <jaxb:javaType name="java.util.Date" 
     xmlType="xsd:dateTime" 
     parseMethod="lol.XsdDateTimeConverter.unmarshal" 
     printMethod="lol.XsdDateTimeConverter.marshalDateTime"   
      /><jaxb:javaType 
     name="java.util.Date" 
     xmlType="xsd:date" 
     parseMethod="lol.XsdDateTimeConverter.unmarshal" 
     printMethod="lol.XsdDateTimeConverter.marshalDate" 
     /> 
     </jaxb:globalBindings> 


</jaxws:bindings> 

उत्तर

19

परीक्षण नहीं किया गया, लेकिन काम करना चाहिए। सबसे पहले ऐसे वर्ग बनाने के लिए:

import javax.xml.bind.DatatypeConverter; 

public class XsdDateTimeConverter { 

    public static Date unmarshal(String dateTime) { 
     return DatatypeConverter.parseDate(dateTime).getTime(); 
    } 

    public static String marshalDate(Date date) { 
     final GregorianCalendar calendar = new GregorianCalendar(); 
     calendar.setTime(date); 
     return DatatypeConverter.printDate(calendar); 
    } 

    public static String marshalDateTime(Date dateTime) { 
     final GregorianCalendar calendar = new GregorianCalendar(); 
     calendar.setTime(dateTime); 
     return DatatypeConverter.printDateTime(calendar); 
    } 

} 

फिर xjb फ़ाइल कस्टम से जोड़ें:

<javaType 
     name="java.util.Date" 
     xmlType="xs:dateTime" 
     parseMethod="XsdDateTimeConverter.unmarshal" 
     printMethod="XsdDateTimeConverter.marshalDateTime" 
     /> 
<javaType 
     name="java.util.Date" 
     xmlType="xs:date" 
     parseMethod="XsdDateTimeConverter.unmarshal" 
     printMethod="XsdDateTimeConverter.marshalDate" 
     /> 
</globalBindings> 

जांची नहीं है, लेकिन काम करना चाहिए। मेरे उत्तर के आधार पर यहां: JAX-WS and Joda-Time?

+0

महान समाधान है, धन्यवाद! –

+0

हे टॉमसज़ मैंने आपके समाधान की कोशिश की और मैं वास्तव में मेवेन प्लगइन का उपयोग कर स्रोतों का निर्माण कर रहा था। यह आवश्यक सभी स्रोतों को उत्पन्न करता है और यह XMLGregorianCalendar की बजाय तिथि उत्पन्न करता है और यह @XmlJavaTypeAdapter (एडाप्टर 2 .class) @XmlSchemaType (name = "date") संरक्षित दिनांक बंद दिनांक के साथ भी एनोटेट किया गया है; लेकिन मेरी समस्या यह है कि यह एडाप्टर कक्षाओं में XsdDateTimeConverter नहीं ढूंढ सका और एक संकलन त्रुटि थी। क्या आप कृपया इस पर मेरी मदद कर सकते हैं। – ROCKY

+0

यहां वही समस्या है। – Lyth

1

धन्यवाद टॉमसज़। उपर्युक्त समाधान काम करता है।
लेकिन wsimport एडाप्टर 1.java और Adapter2.java जैसे अपने एडाप्टर के सेट को अपने पैकेज org.w3._2001.xmlschema के साथ जोड़ता है, जो वास्तव में मेरे स्वयं के पैकेज संरचना से मेल नहीं खाता है।

मुझे एक और जैक्सबी बाध्यकारी का उपयोग करके इस पैकेज नाम को बदलने का एक तरीका मिला। असल में, मैंने इसकी बहुत खोज की और इसे आसानी से नहीं मिला, इसलिए मैं इसे यहां ढूंढने वाले किसी के लिए इसे जोड़ रहा हूं।

'-b binding.xml' का उपयोग करके wsimport में निम्नलिखित बाध्यकारी जोड़ें। ध्यान दें कि wsimport एकाधिक बाध्यकारी फ़ाइलों के साथ काम कर सकते हैं। नीचे

binding.xml सामग्री:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    jaxb:version="2.0"> 
    <annotation><appinfo> 
    <jaxb:schemaBindings> 
     <jaxb:package name="com.abc.xyz.utils"/> 
    </jaxb:schemaBindings> 
    </appinfo></annotation> 
</schema> 
संबंधित मुद्दे