.NET এর এক্সএমএল সিরিয়ালাইজের জাভা অ্যানালগ কী?
.NET এর এক্সএমএল সিরিয়ালাইজের জাভা অ্যানালগ কী?
উত্তর:
2008 উত্তর দিন এর জন্য "অফিশিয়াল" জাভা এপিআই এখন জ্যাকএক্সবি - এক্সএমএল বাইন্ডিংয়ের জাভা এপিআই। ওরাকল দ্বারা টিউটোরিয়াল দেখুন । রেফারেন্স বাস্তবায়ন http://jaxb.java.net/ এ বাস করে
2018 আপডেট নোট করুন যে জাভা EE এবং CORBA মডিউলগুলি JDK9 এ SE তে অবহেলা করা হয়েছে এবং জেডিকে 11 এ এসই থেকে সরানো হবে । অতএব, জ্যাকএক্সবি ব্যবহার করার জন্য এটি হয় আপনার বিদ্যমান এন্টারপ্রাইজ শ্রেণীর পরিবেশে থাকা উচিত যেমন আপনার অ্যাপ্লিকেশন সার্ভার দ্বারা বান্ডিল করা, অথবা আপনাকে এটি ম্যানুয়ালি আনতে হবে।
এক্সস্ট্রিমটি অনেক কনফিগারেশন এবং অর্থ ছাড়াই এক্সএমএলকে অবজেক্ট সিরিয়াল করার ক্ষেত্রে বেশ ভাল! (এটি বিএসডি লাইসেন্সের আওতায়)।
আমরা আমাদের প্রকল্পের একটিতে এটি ব্যবহার করে সরল পুরানো জাভা-সিরিয়ালাইজেশন প্রতিস্থাপন করতে পারি এবং এটি প্রায় বাক্সের বাইরে কাজ করে।
আপনি সাধারণ এক্সএমএল সিরিয়ালাইজেশন প্রকল্পটি দেখতে চাইতে পারেন । এটি নেট.মেটনে সিস্টেম.এক্সএমএল।
জেএক্সবি জেডিকে স্ট্যান্ডার্ড সংস্করণ 1.6+ এর অংশ। সুতরাং এটি FREE
ডাউনলোড এবং পরিচালনা করার জন্য কোনও অতিরিক্ত লাইব্রেরি নেই। একটি সাধারণ উদাহরণ এখানে পাওয়া যাবে
এক্সস্ট্রিম মারা গেছে বলে মনে হচ্ছে। শেষ আপডেটটি 2008 ডিসেম্বর ২০০৮ এ ছিল।
Simple
জ্যাকএক্সবির মতো সহজ এবং সরল মনে হলেও এন্টারপ্রাইজ ব্যবহারের জন্য এটি মূল্যায়নের জন্য কোনও লাইসেন্সিং তথ্য আমি পাইনি।
উল্লেখযোগ্য যে সংস্করণ ১.৪ থেকে জাভা.বেইনস.এক্সএমএলএনসিএনডার এবং জাভা.বেইনস.এক্সএমএলডেকোডার ক্লাস ছিল। এই ক্লাসগুলি এক্সএমএল এনকোডিং করে যা এক্সএমএল সিরিয়ালাইজেশনের সাথে কমপক্ষে খুব তুলনীয় এবং কিছু পরিস্থিতিতে আপনার জন্য কৌশলটি করতে পারে।
যদি আপনার শ্রেণি জাভাবিয়ানগুলির স্পেসিফিকেশনগুলির সাথে তার গেটার এবং সেটারগুলির জন্য লেগে থাকে তবে এই পদ্ধতিটি ব্যবহার করা সহজ and এবং আপনার কোনও স্কিমা দরকার নেই। নিম্নলিখিত সতর্কতা সহ:
উদাহরণস্বরূপ, নিম্নলিখিত ঘোষণাটি নিন:
public class NPair {
public NPair() { }
int number1 = 0;
int number2 = 0;
public void setNumber1(int value) { number1 = value;}
public int getNumber1() { return number1; }
public void setNumber2(int value) { number2 = value; }
public int getNumber2() {return number2;}
}
এই কোডটি কার্যকর করা হচ্ছে:
NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();
নিম্নলিখিত ফাইলের ফলাফল হবে:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
<object class="NPair">
<void property="number1">
<int>12</int>
</void>
<void property="number2">
<int>13</int>
</void>
</object>
</java>
java.beans.XMLDecoder
ব্যবহারকারী সরবরাহিত ডেটা ব্যবহার করে আপনার কোডে স্বেচ্ছাচারিত কোড প্রয়োগের দুর্বলতার পরিচয় দিতে পারে।
যদি আপনার এক্সএমএলটির জন্য স্কিমা থাকে তবে এক্সএমএল বিয়ানস দুর্দান্ত কাজ করে। এটি স্কিমাটির জন্য জাভা অবজেক্ট তৈরি করে এবং পার্স পদ্ধতি ব্যবহার করা সহজ করে তোলে।
আপনি যদি অবজেক্টগুলির স্বয়ংক্রিয় এক্সএমএল সিরিয়ালাইজেশন সম্পর্কে কথা বলছেন তবে ক্যাস্টারটি দেখুন :
ক্যাস্টর জাভা [টিএম] এর জন্য একটি ওপেন সোর্স ডেটা বাঁধাই কাঠামো। এটি জাভা অবজেক্টস, এক্সএমএল ডকুমেন্টস এবং রিলেশনাল টেবিলগুলির মধ্যে সংক্ষিপ্ততম পথ। ক্যাস্টর জাভা-থেকে-এক্সএমএল বাইন্ডিং, জাভা-থেকে-এসকিউএল জেদ এবং আরও অনেক কিছু সরবরাহ করে।
যদি আমি এক্সএমএলকে সিরিয়ালিয়েটেবল করার মতো অবজেক্ট তৈরি করতে হয় তবে আমি জ্যাক্সবি বা এক্সএমএলবিয়ান ব্যবহার করি। এখন, আমি দেখতে পাচ্ছি যে এক্সস্ট্রিমটি খুব কার্যকরী হতে পারে কারণ এটি অবিস্মরণীয় এবং সত্যই সহজ এপিআই রয়েছে। আমি শীঘ্রই এটি নিয়ে খেলব এবং সম্ভবত এটি ব্যবহার করব। কেবলমাত্র ত্রুটিটি আমি লক্ষ্য করেছি যে ক্রস রেফারেন্সিংয়ের জন্য আমি নিজের থেকে অবজেক্টের আইডি তৈরি করতে পারি না।
@ বারাক শিলার এক্সস্ট্রিমের
লিঙ্ক পোস্ট করার জন্য ধন্যবাদ!
জিবিএক্সকে ভুলে যাবেন না ।
আপনি যদি একটি কাঠামোগত সমাধান চান (যেমন ওআরএম) তবে জ্যাকএক্সবি 2 একটি ভাল সমাধান।
আপনি যদি ডট নেট এর মতো সিরিয়ালাইজেশন চান তবে জাভাবিয়ানস উপাদানগুলির দীর্ঘমেয়াদী পার্সেস্টিন ব্যবহার করতে পারেন
পছন্দ সিরিয়ালাইজেশন ব্যবহারের উপর নির্ভর করে।
public static String genXmlTag(String tagName, String innerXml, String properties )
{
return String.format("<%s %s>%s</%s>", tagName, properties, innerXml, tagName);
}
public static String genXmlTag(String tagName, String innerXml )
{
return genXmlTag(tagName, innerXml, "");
}
public static <T> String serializeXML(List<T> list)
{
String result = "";
if (list.size() > 0)
{
T tmp = list.get(0);
String clsName = tmp.getClass().getName();
String[] splitCls = clsName.split("\\.");
clsName = splitCls[splitCls.length - 1];
Field[] fields = tmp.getClass().getFields();
for (T t : list)
{
String row = "";
try {
for (Field f : fields)
{
Object value = f.get(t);
row += genXmlTag(f.getName(), value == null ? "" : value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
row = genXmlTag(clsName, row);
result += row;
}
}
result = genXmlTag("root", result);
return result;
}