জাভাতে এক্সএমএল সিরিয়ালাইজেশন? [বন্ধ]


104

.NET এর এক্সএমএল সিরিয়ালাইজের জাভা অ্যানালগ কী?


6
আহ, গৌরবময় পুরানো সময় যখন এই জাতীয় ওয়ান লাইনার প্রশ্নগুলি এসও তে স্বাগত জানায়। তাই দরকারী। "আপনি কি চেষ্টা করেছেন?" / "বিবরণ সরবরাহ করুন" বাজে কথা না বলা লোকেরা আজ পড়তে পছন্দ করে Without
0-10

উত্তর:


81

2008 উত্তর দিন এর জন্য "অফিশিয়াল" জাভা এপিআই এখন জ্যাকএক্সবি - এক্সএমএল বাইন্ডিংয়ের জাভা এপিআই। ওরাকল দ্বারা টিউটোরিয়াল দেখুন । রেফারেন্স বাস্তবায়ন http://jaxb.java.net/ এ বাস করে

2018 আপডেট নোট করুন যে জাভা EE এবং CORBA মডিউলগুলি JDK9 এ SE তে অবহেলা করা হয়েছে এবং জেডিকে 11 এ এসই থেকে সরানো হবে । অতএব, জ্যাকএক্সবি ব্যবহার করার জন্য এটি হয় আপনার বিদ্যমান এন্টারপ্রাইজ শ্রেণীর পরিবেশে থাকা উচিত যেমন আপনার অ্যাপ্লিকেশন সার্ভার দ্বারা বান্ডিল করা, অথবা আপনাকে এটি ম্যানুয়ালি আনতে হবে।


2
এটা ঠিক, JAXB অবশ্যই সেরা বিকল্প!
ivan_ivanovich_ivanoff

1
জাএএক্সবি জাভা 10 হিসাবে স্ট্যান্ডার্ড জাভা বিতরণগুলি থেকে সরানো হয়েছিল, এটি আপনাকে এখন যদি একটি লাইব্রেরি করে তোলে তবে আপনি যদি চান তবে আপনার অ্যাপ্লিকেশনটি বান্ডিল করতে হবে, যদি না আপনি ইতিমধ্যে আপনার জন্য এটি বান্ডিল করে এমন কোনও প্রসঙ্গে কাজ করছেন।
থিওডোর মুরডক

69

এক্সস্ট্রিমটি অনেক কনফিগারেশন এবং অর্থ ছাড়াই এক্সএমএলকে অবজেক্ট সিরিয়াল করার ক্ষেত্রে বেশ ভাল! (এটি বিএসডি লাইসেন্সের আওতায়)।

আমরা আমাদের প্রকল্পের একটিতে এটি ব্যবহার করে সরল পুরানো জাভা-সিরিয়ালাইজেশন প্রতিস্থাপন করতে পারি এবং এটি প্রায় বাক্সের বাইরে কাজ করে।


3
খুব দরকারী, এটি নন স্ট্রিং নোড বস্তুর সাথে জেগ্রাফের মতো জটিল গাছের কাঠামোতে সমস্যা হতে পারে have
মাইকেক 3332002

সহজ এবং আরও ভাল তারপর অন্যান্য সমাধান
daitangio

আমি এক্সস্ট্রিম পছন্দ করি। কেবলমাত্র এটি হ'ল আসল XML এর আগে কেন একটি চরিত্র যুক্ত করা হয়েছে তা আমি বুঝতে পারি না।
জেমস পি।

17

"সাধারণ এক্সএমএল সিরিয়ালাইজেশন" প্রকল্প

আপনি সাধারণ এক্সএমএল সিরিয়ালাইজেশন প্রকল্পটি দেখতে চাইতে পারেন । এটি নেট.মেটনে সিস্টেম.এক্সএমএল।


তবে এটি প্রতিটি ক্ষেত্রের জন্য ম্যাপিং টীকা প্রয়োজন।
এমপি।

1
সত্য নয়, আমার দরকার নেই। আপনি ডিফল্ট আচরণ পরিবর্তন করতে পারেন এবং এটি কেবল উপস্থিত ক্ষেত্রগুলি ব্যবহার করবে।
দামালুয়ার

1
আমি আন্তরিকভাবে "সহজ" এরও সমর্থন করি । আমি এটি বেশ সাফল্যের সাথে কয়েকটি প্রকল্পে ব্যবহার করেছি। "সিম্পল" জ্যাকসবি আসলেই অনেক সহজ। আপনার তুলনামূলকভাবে সহজ চাহিদা সর্বাধিক উপযুক্ত: অবজেক্ট হিসাবে পুনরায় হাইড্রেটেড হওয়ার জন্য স্টোরেজে লেখার দরকার রয়েছে এমন বস্তুগুলি পাওয়া গেল। জ্যাকএক্সবিতে আরও অনেকগুলি বৈশিষ্ট্য এবং নমনীয়তা রয়েছে তবে এটি একটি "80/20" ধরণের জিনিস, বেশিরভাগ প্রকল্পে আপনার বেশিরভাগ সময় কেবলমাত্র বৈশিষ্ট্যগুলির সাধারণ উপসেট প্রয়োজন হতে পারে।
তুলসী বাউরক

আপনি যদি কেবল 1: 1 ম্যাপিং চান তবে ভাল কাজ করে। যদি আপনার ক্লাসগুলি বিকশিত হয় এবং আপনার এখনও পুরানো এক্সএমএলকে deserialize করা প্রয়োজন, আপনি সমস্যা সমাধান করবেন কারণ ডকুমেন্টেশন এবং ত্রুটি বার্তা উভয়ই কিছুটা অস্পষ্ট। সমস্যা নির্ণয় সাধারণত করণীয়, তবে কীভাবে এটি ঠিক করতে হবে তা নির্ধারণ করতে বেশ কয়েক দিন সময় নিতে পারে।
টুলফোজার

13

জেএক্সবি জেডিকে স্ট্যান্ডার্ড সংস্করণ 1.6+ এর অংশ। সুতরাং এটি FREEডাউনলোড এবং পরিচালনা করার জন্য কোনও অতিরিক্ত লাইব্রেরি নেই। একটি সাধারণ উদাহরণ এখানে পাওয়া যাবে

এক্সস্ট্রিম মারা গেছে বলে মনে হচ্ছে। শেষ আপডেটটি 2008 ডিসেম্বর ২০০৮ এ ছিল। Simpleজ্যাকএক্সবির মতো সহজ এবং সরল মনে হলেও এন্টারপ্রাইজ ব্যবহারের জন্য এটি মূল্যায়নের জন্য কোনও লাইসেন্সিং তথ্য আমি পাইনি।


4
এক্সস্ট্রিম মারা যায় নি, এটি কেবল পরিপক্ক এবং স্থিতিশীল - যার অর্থ মূল কার্যকারিতা যুক্ত করার মতো খুব বেশি কিছু নেই। জ্যাকসবি রেফারেন্স বাস্তবায়নের ক্ষেত্রে একই ঘটনা সত্য, গত কয়েক বছর ধরে খুব বেশি কার্যকলাপ নেই।
স্ট্যাক্সম্যান

9

উল্লেখযোগ্য যে সংস্করণ ১.৪ থেকে জাভা.বেইনস.এক্সএমএলএনসিএনডার এবং জাভা.বেইনস.এক্সএমএলডেকোডার ক্লাস ছিল। এই ক্লাসগুলি এক্সএমএল এনকোডিং করে যা এক্সএমএল সিরিয়ালাইজেশনের সাথে কমপক্ষে খুব তুলনীয় এবং কিছু পরিস্থিতিতে আপনার জন্য কৌশলটি করতে পারে।

যদি আপনার শ্রেণি জাভাবিয়ানগুলির স্পেসিফিকেশনগুলির সাথে তার গেটার এবং সেটারগুলির জন্য লেগে থাকে তবে এই পদ্ধতিটি ব্যবহার করা সহজ 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

যদি আপনার এক্সএমএলটির জন্য স্কিমা থাকে তবে এক্সএমএল বিয়ানস দুর্দান্ত কাজ করে। এটি স্কিমাটির জন্য জাভা অবজেক্ট তৈরি করে এবং পার্স পদ্ধতি ব্যবহার করা সহজ করে তোলে।


0

আপনি যদি অবজেক্টগুলির স্বয়ংক্রিয় এক্সএমএল সিরিয়ালাইজেশন সম্পর্কে কথা বলছেন তবে ক্যাস্টারটি দেখুন :

ক্যাস্টর জাভা [টিএম] এর জন্য একটি ওপেন সোর্স ডেটা বাঁধাই কাঠামো। এটি জাভা অবজেক্টস, এক্সএমএল ডকুমেন্টস এবং রিলেশনাল টেবিলগুলির মধ্যে সংক্ষিপ্ততম পথ। ক্যাস্টর জাভা-থেকে-এক্সএমএল বাইন্ডিং, জাভা-থেকে-এসকিউএল জেদ এবং আরও অনেক কিছু সরবরাহ করে।


0

যদি আমি এক্সএমএলকে সিরিয়ালিয়েটেবল করার মতো অবজেক্ট তৈরি করতে হয় তবে আমি জ্যাক্সবি বা এক্সএমএলবিয়ান ব্যবহার করি। এখন, আমি দেখতে পাচ্ছি যে এক্সস্ট্রিমটি খুব কার্যকরী হতে পারে কারণ এটি অবিস্মরণীয় এবং সত্যই সহজ এপিআই রয়েছে। আমি শীঘ্রই এটি নিয়ে খেলব এবং সম্ভবত এটি ব্যবহার করব। কেবলমাত্র ত্রুটিটি আমি লক্ষ্য করেছি যে ক্রস রেফারেন্সিংয়ের জন্য আমি নিজের থেকে অবজেক্টের আইডি তৈরি করতে পারি না।

@ বারাক শিলার এক্সস্ট্রিমের
লিঙ্ক পোস্ট করার জন্য ধন্যবাদ!


সমস্যা হল জ্যাক্সবি এবং এক্সএমএলবিয়ানগুলির জন্য একটি ম্যাপিং স্কিমা এবং আর্টেন্ট অটো প্রয়োজন ...
এমপি।


0

আপনি যদি একটি কাঠামোগত সমাধান চান (যেমন ওআরএম) তবে জ্যাকএক্সবি 2 একটি ভাল সমাধান।

আপনি যদি ডট নেট এর মতো সিরিয়ালাইজেশন চান তবে জাভাবিয়ানস উপাদানগুলির দীর্ঘমেয়াদী পার্সেস্টিন ব্যবহার করতে পারেন

পছন্দ সিরিয়ালাইজেশন ব্যবহারের উপর নির্ভর করে।


-1
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;
}

অনেক সমস্যা: ক্লাস # getSimpleName এর পুনর্বিন্যাস *** সম্পত্তি বিবরণী পুনর্বিবেচনা *** ধরে নেওয়া সমস্ত বৈশিষ্ট্য অ্যাক্সেসযোগ্য ক্ষেত্রসমূহ *** প্রতিফলনের ফলাফলগুলিকে ক্যাশ দেয় না (স্ল্যাওও) *** কিছু অনুকূলিতকরণের উপায় নেই (যেমন, আমাকে প্রতিস্থাপন করতে হবে শ্রেণি এবং ফাইলের নাম) *** কোনও
deserialization
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.