मेरे पास लगभग wsdl फ़ाइलें लगभग सैकड़ों हैं। जब भी मैं उनके लिए क्लाइंट जैक्सबी क्लाइंट क्लासेस बना देता हूं तो जैक्सब स्वचालित रूप से सभी दिनांक/समय फ़ील्ड को XMLGregorianCalender पर मानचित्र करता है। बहुत सारे गुगलिंग के बाद, मैंने पाया कि एक अलग बाध्यकारी फ़ाइल प्रदान करना एकमात्र समाधान है।डब्लूएसडीएल अनुकूलन: XMLGregorianCalender java.util.Date
मैं wsdl स्थान प्रदान नहीं करना चाहता, क्योंकि मेरे पास बहुत सारे हैं, अन्यथा मुझे प्रत्येक wsdl के लिए एक अलग बाध्यकारी फाइलें बनाना होगा।
नीचे उपयोग की जाने वाली बाध्यकारी फ़ाइल है।
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" >
<globalBindings>
<javaType name="java.util.Date" xmlType="xsd:dateTime" />
</globalBindings>
</bindings>
यह तिथि प्रकार के साथ JAXB कक्षाओं बनाया है, लेकिन यह भी एक एडाप्टर Adapter1.java स्वचालित रूप से कहा जाता है जो रखा गया था है जिसमें मैं नहीं चाहता बनाया। मेरे पास अपनी खुद की पैकेज संरचना है और इससे विचलित नहीं हो सकता है।
org.w3._2001.xmlschema
और इस एडाप्टर java.util.Date के लिए स्ट्रिंग से तारीख धर्मान्तरित और अपने आवेदन में विफल रहता है के रूप में कनवर्टर XMLGregorianCalender से java.util.Date में बदलने चाहिए
तो, मैं एक एडाप्टर अपने आप
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Calendar;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateAdapter extends XmlAdapter<XMLGregorianCalendar, Date> {
@Override
public XMLGregorianCalendar marshal(Date date) throws Exception {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTime(date);
XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
return xmlGregorianCalendar;
}
@Override
public Date unmarshal(XMLGregorianCalendar xmlGregorianCalendar) throws Exception {
return xmlGregorianCalendar.toGregorianCalendar().getTime();
}
}
लिखा था और इस तरह मेरी अनुकूलन फ़ाइल बदल:
+०१२३५१६४१०<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" >
<globalBindings>
<javaType name="java.util.Date" xmlType="xsd:dateTime"
parseMethod="DateAdapter.marshal"
printMethod="DateAdapter.unmarshal" />
</globalBindings>
</bindings>
तब मैं wsimport उपकरण चला गया और यह असफल रहा।
C:\Users\stuart\Desktop\code>wsimport -s src -d gen -b cust.txt http://localhost:8080/webservice-jaxws/DummyService?wsdl
parsing WSDL...
generating code...
compiling code...
C:\Users\stuart\Desktop\code\src\org\w3\_2001\xmlschema\Adapter1.java:13: cannot find symbol
symbol : variable DateAdapter
location: class org.w3._2001.xmlschema.Adapter1
return (DateAdapter.marshal(value));
^
C:\Users\stuart\Desktop\code\src\org\w3\_2001\xmlschema\Adapter1.java:17: cannot find symbol
symbol : variable DateAdapter
location: class org.w3._2001.xmlschema.Adapter1
return (DateAdapter.unmarshal(value));
^
2 errors
compilation failed, errors should have been reported
और मैं wsimport आदेश में दी गई, और मेरी DateAdapter वर्ग स्रोत फ़ाइल एक ही निर्देशिका में भी था, क्योंकि cust.txt में मेरे अनुकूलन सेटिंग्स रखा। कक्षा पैकेज के बिना थी। निम्नलिखित मेरी निर्देशिका संरचना है।
³ cust.txt
³ DateAdapter.java
³
ÃÄÄÄgen
³ ÃÄÄÄorg
³ ³ ÀÄÄÄw3
³ ³ ÀÄÄÄ_2001
³ ³ ÀÄÄÄxmlschema
³ ³ Adapter1.class
³ ³
³ ÀÄÄÄwebservice
³ ÀÄÄÄjaxws
³ ÀÄÄÄgenerated
³ GetBook.class
³ GetBookResponse.class
³ ObjectFactory.class
³ package-info.class
³ Book.class
³ BookService.class
³ BookServiceImpl.class
³ ReturnBook.class
³ ReturnBookResponse.class
³
ÀÄÄÄsrc
ÃÄÄÄorg
³ ÀÄÄÄw3
³ ÀÄÄÄ_2001
³ ÀÄÄÄxmlschema
³ Adapter1.java
³
ÀÄÄÄwebservice
ÀÄÄÄjaxws
ÀÄÄÄgenerated
GetBook.java
GetBookResponse.java
ObjectFactory.java
package-info.java
Book.java
BookService.java
BookServiceImpl.java
ReturnBook.java
ReturnBookResponse.java