আপনি যদি 5 মিনিটেরও কম সময়ে জাভা থেকে এক্সএমএল এবং এক্সএমএল থেকে জাভা কোডিং শুরু করতে চান তবে সিম্পল এক্সএমএল সিরিয়ালাইজেশন চেষ্টা করুন। জেএক্সবি এপিআই শিখতে ঘন্টা ব্যয় করবেন না
http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php
তবে আপনি যদি জ্যাকএক্সবি শেখার বিষয়ে আগ্রহী হন তবে এখানে একটি দুর্দান্ত টিউটোরিয়াল's
http://blogs.oracle.com/teera/entry/jaxb_for_simple_java_xml
টিউটোরিয়াল সামগ্রী:
সহজ জাভা-এক্সএমএল সিরিয়ালাইজেশনের জন্য জ্যাকএক্সবি
জাভাতে এক্সএমএল সিরিয়ালাইজেশন করার অনেকগুলি উপায় রয়েছে। আপনি যদি পার্সিং এবং সিরিয়ালাইজেশনের উপর সূক্ষ্ম-নিয়ন্ত্রণযুক্ত নিয়ন্ত্রণ চান তবে আপনি আরও ভাল পারফরম্যান্সের জন্য স্যাক্স, ডম বা স্ট্যাক্সে যেতে পারেন। তবুও, আমি প্রায়শই যা করতে চাই তা হ'ল POJOs এবং XML এর মধ্যে একটি সাধারণ ম্যাপিং। তবে এক্সএমএল ইভেন্টটি ম্যানুয়ালি পার্সিং করতে জাভা ক্লাস তৈরি করা তুচ্ছ নয়। আমি সম্প্রতি জ্যাকএক্সবিটিকে একটি দ্রুত এবং সুবিধাজনক জাভা-এক্সএমএল ম্যাপিং বা সিরিয়ালাইজেশন হিসাবে পেয়েছি।
জ্যাকএক্সবিতে প্রচুর দরকারী বৈশিষ্ট্য রয়েছে, আপনি এখানে রেফারেন্স বাস্তবায়নটি পরীক্ষা করে দেখতে পারেন। Kohsuke এর ব্লগ এছাড়াও JAXB সম্পর্কে আরো জানতে একটি ভাল সম্পদ। এই ব্লগ এন্ট্রির জন্য, আমি আপনাকে জ্যাকএক্সবি দিয়ে কীভাবে একটি সাধারণ জাভা-এক্সএমএল সিরিয়ালাইজেশন করব তা দেখাব।
এক্সএমএলে পোজো
ধরা যাক আমার কাছে আইটেম জাভা অবজেক্ট রয়েছে। আমি আইএমএল অবজেক্টটি এক্সএমএল ফর্ম্যাটে সিরিয়াল করতে চাই। আমাকে প্রথমে যা করতে হবে তা হ'ল javax.xML.bind.annotation। * প্যাকেজ থেকে কয়েকটি এক্সএমএল টিকা দিয়ে এই পোজোটিকে টীকায়িত করা। আইটেম.জভা জন্য কোড তালিকা 1 দেখুন
কোড থেকে
@XmlRootElement(name="Item")
ইঙ্গিত দেয় যে আমি মূল উপাদান হতে চাই।
@XmlType(propOrder = {"name", "price"})
XML আউটপুটটিতে উপাদানটি সাজানো হোক এমন আদেশটি নির্দেশ করে।
@XmlAttribute(name="id", ...)
নির্দেশ করে যে আইডিটি মূল উপাদানটির একটি বৈশিষ্ট্য।
@XmlElement(....)
ইঙ্গিত দেয় যে আমি দাম এবং নামটি আইটেমের মধ্যে উপাদান হতে চাই।
আমার Item.java
প্রস্তুত। তারপরে আমি এগিয়ে যেতে এবং আইটেম মার্শাল করার জন্য জ্যাকএক্সবি স্ক্রিপ্ট তৈরি করতে পারি।
//creating Item data object
Item item = new Item();
item.setId(2);
item.setName("Foo");
item.setPrice(200);
.....
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
//I want to save the output file to item.xml
marshaller.marshal(item, new FileWriter("item.xml"));
সম্পূর্ণ কোড তালিকাভুক্তির জন্য দয়া করে কোড তালিকা 2 দেখুন main.java
। আউটপুট কোড তালিকা 3 item.xml
ফাইল তৈরি করা হয়। দেখে মনে হচ্ছে:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:item ns1:id="2" xmlns:ns1="http://blogs.sun.com/teera/ns/item">
<ns1:itemName>Foo</ns1:itemName>
<ns1:price>200</ns1:price>
</ns1:item>
সহজ? আপনি বিকল্প হিসাবে আউটপুট এক্সএমএলটিকে পাঠ্য স্ট্রিং, স্ট্রিম, রাইটার, কন্টেন্টহ্যান্ডলার ইত্যাদি হিসাবে চ্যানেল করতে পারেন কেবল মার্শাল (...) পদ্ধতির প্যারামিটারের মতো পরিবর্তন করে
...
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
// save xml output to the OutputStream instance
marshaller.marshal(item, <java.io.OutputStream instance>);
...
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
//save to StringWriter, you can then call sw.toString() to get java.lang.String
marshaller.marshal(item, sw);
এক্সএমএল টু পোজো
প্রক্রিয়াটি বিপরীত করা যাক। ধরে নিন যে আমার কাছে এখন এক্সএমএল স্ট্রিং ডেটা রয়েছে এবং আমি এটি আইটেম.জভা অবজেক্টে রূপান্তর করতে চাই। এক্সএমএল ডেটা (কোড তালিকা 3) দেখে মনে হচ্ছে
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:item ns1:id="2" xmlns:ns1="http://blogs.sun.com/teera/ns/item">
<ns1:itemName>Bar</ns1:itemName>
<ns1:price>80</ns1:price>
</ns1:item>
তারপরে আমি এই এক্সএমএল কোডটি আইটেমের মাধ্যমে আইটেমের মাধ্যমে আনমারশাল করতে পারি
...
ByteArrayInputStream xmlContentBytes = new ByteArrayInputStream (xmlContent.getBytes());
JAXBContext context = JAXBContext.newInstance(Item.getClass());
Unmarshaller unmarshaller = context.createUnmarshaller();
//note: setting schema to null will turn validator off
unmarshaller.setSchema(null);
Object xmlObject = Item.getClass().cast(unmarshaller.unmarshal(xmlContentBytes));
return xmlObject;
...
সম্পূর্ণ কোড তালিকার জন্য কোড লিস্টিং 2 (মেইন.জাভা) দেখুন। এক্সএমএল উত্স স্ট্রিম এবং ফাইল উভয় থেকে অনেক ফর্মে আসতে পারে। আবার পার্থক্য হ'ল পদ্ধতি প্যারামিটার:
...
unmarshaller.unmarshal(new File("Item.xml")); // reading from file
...
// inputStream is an instance of java.io.InputStream, reading from stream
unmarshaller.unmarshal(inputStream);
এক্সএমএল স্কিমা সহ বৈধতা
সর্বশেষ যে জিনিসটি আমি এখানে উল্লেখ করতে চাই তা হ'ল জাভা অবজেক্টে আনমারশেলিংয়ের আগে স্কিমার সাথে ইনপুট এক্সএমএলকে বৈধতা দেওয়া। আমি আইটেম.এসএসডি নামে একটি এক্সএমএল স্কিমা ফাইল তৈরি করি। সম্পূর্ণ কোড তালিকাভুক্তির জন্য দয়া করে কোড তালিকা 4 (আইটেম.এক্সএসডি) দেখুন। এখন আমাকে যা করতে হবে তা হল বৈধতার জন্য এই স্কিমাটি নিবন্ধন করা।
...
Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
.newSchema(new File("Item.xsd"));
unmarshaller.setSchema(schema); //register item.xsd shcema for validation
...
আমি যখন POJO- তে এক্সএমএল ডেটা আনমারশাল করার চেষ্টা করি, তবে ইনপুট এক্সএমএল যদি স্কিমা অনুসারে রূপ নেয় না, ব্যতিক্রম ধরা পড়বে। সম্পূর্ণ কোড তালিকাভুক্তির জন্য দয়া করে কোড তালিকা 5 দেখুন (অবৈধ_সাইটম.এক্সএমএল)।
javax.xml.bind.UnmarshalException
- with linked exception:
javax.xml.bind.JAXBException caught: null
[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: 'item1' is
not a valid value for 'integer'.]
এখানে আমি পূর্ণসংখ্যার পরিবর্তে স্ট্রিংয়ের জন্য 'id' বৈশিষ্ট্যটি পরিবর্তন করি।
যদি এক্সএমএল ইনপুটটি স্কিমাটির বিপরীতে বৈধ হয়, তবে এক্সএমএল ডেটা সাফল্যের সাথে আইটেম.জভা অবজেক্টে চিহ্নমুক্ত করা হবে।