javax.xML.bind.UnmarshalException: অপ্রত্যাশিত উপাদান (uri: "", স্থানীয়: "গ্রুপ")


103
unexpected element (uri:"", local:"Group"). Expected elements are <{}group>

এক্সএমএল থেকে আনমারশেল করার সময় একটি ব্যতিক্রমের সাথে মিলিত হন

JAXBContext jc = JAXBContext.newInstance(Group.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));

গোষ্ঠী শ্রেণিতে কোনও টিকা নেই এবং গ্রুপ.xML এ কেবল ডেটা রয়েছে।

কিছু কারণ হতে পারে?


4
এখানে অনুসন্ধান থেকে যারা আসছেন তাদের জন্য, আমি কেবল মন্তব্য করতে চাই যে ObjectFactoryউত্পন্ন উত্স থেকে ভুল ব্যবহার করার কারণে এটি ঘটতে পারে , যদি আপনি দুটি পৃথক উত্পন্ন উত্স ডিরেক্টরিগুলি মিশ্রিত করেন তবে সম্ভবত এটি সম্ভবত বেশি।
বার্বার

উত্তর:


119

দেখে মনে হচ্ছে আপনার এক্সএমএল নথিতে "গ্রুপ" এর পরিবর্তে মূল গ্রুপ "গ্রুপ" রয়েছে। আপনি পারেন:

  1. আপনার এক্সএমএলের মূল উপাদানটিকে "গোষ্ঠী" হিসাবে পরিবর্তন করুন
  2. গ্রুপ ক্লাসে টীকাটি যোগ করুন @ এক্সএমএল রুটএলিমেন্ট (নাম = "গ্রুপ")।

2
এটি সমস্যার সমাধান করেছে, ধন্যবাদ! আমি দ্বিতীয় সমাধানটি ব্যবহার করেছি, @ XMLRootElement (নাম = "গ্রুপ")) আমার শ্রেণীর নাম গোষ্ঠী, এবং এক্সএমএল মূল উপাদানটি গ্রুপ, কেন এখনও আমার নাম = "গোষ্ঠী" প্রয়োজন
ব্যবহারকারীর 496949

1
: পরীক্ষা করে দেখুন stackoverflow.com/questions/5203531/...
bdoughan

2
@BlaiseDoughan আমি ঠিক বিপরীত সমস্যা হচ্ছে, আমি আছে @XmlRootElement(name = "MB") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "MB", propOrder = { "date", "time" })কিন্তু আমি পেয়ে করছি unexpected element (uri:"http://xx.title.com/new/response", local:"MB"). Expected elements are <{}Date>,<{}MB>,<{}Time>আমারও আছে @XmlElement(name="Date", required = true)প্রতিটি ক্ষেত্রের উপর। কোথায় এবং কেন এটি ভুল হচ্ছে? আমি অপসারণ চেষ্টা করেছি @XmlRootElement!
রাহুল ঠাকুর

4
এখানে সমস্যা সমাধান @XmlSchemaহয়েছে package-info.java, এখনই ঠিক করা হয়েছে।
রাহুল ঠাকুর

35

আপনার উত্পন্ন জ্যাক্সবি প্যাকেজে আপনার প্যাকেজ-ইনফো.জভা রাখতে হবে। এর সামগ্রীটি এমন কিছু হওয়া উচিত

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.example.org/StudentOperations/")
package generated.marsh;

33

ভাগ্যক্রমে, প্যাকেজ-তথ্য শ্রেণীর প্রয়োজন নেই। আমি iowatiger08 সমাধানের সাথে আমার সমস্যার সমাধান করতে সক্ষম হয়েছি।

এখানে কিছুকে বিন্দুতে যোগদানের জন্য আমার ত্রুটি বার্তাটি দেখানো হচ্ছে।

ভুল বার্তা

javax.xML.bind.UnmarshalException: অপ্রত্যাশিত উপাদান (uri: " http://global.aon.bz/schema/cbs/archive/errorresource/0 ", স্থানীয়: "ত্রুটিযুক্ত উত্স")। প্রত্যাশিত উপাদানগুলি হ'ল <} ত্রুটিযুক্ত উত্স>

ঠিক করার আগে কোড

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="", propOrder={"error"})
@XmlRootElement(name="errorresource")
public class Errorresource

ঠিক করার পরে কোড

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="", propOrder={"error"})
@XmlRootElement(name="errorresource", namespace="http://global.aon.bz/schema/cbs/archive/errorresource/0")
public class Errorresource

ত্রুটি বার্তায় নির্দেশিত হিসাবে আপনি @XMLRootElement এ যুক্ত হওয়া নেমস্পেসটি দেখতে পারেন।


একই ইস্যুটির মুখোমুখি হয়ে আপনার মন্তব্য অনুসরণ করেছেন এবং সমস্যাটি সমাধান হয়েছে is ধন্যবাদ.
বিবিন জাকারিয়া

9

আরও দেখার পরে, ব্লেইস লক্ষণীয় হওয়ায় মূল উপাদানটি স্কিমা-নেমস্পেসের সাথে যুক্ত থাকতে হবে। তবুও, আমার কাছে কোনও প্যাকেজ-তথ্য জাভা নেই। সুতরাং @ XMLSchema টীকাটি ব্যবহার না করেই, আমি ব্যবহার করে এই সমস্যাটি সংশোধন করতে সক্ষম হয়েছি

@XmlRootElement (name="RetrieveMultipleSetsResponse", namespace = XMLCodeTable.NS1)
@XmlType(name = "ns0", namespace = XMLCodeTable.NS1)
@XmlAccessorType(XmlAccessType.NONE)
public class RetrieveMultipleSetsResponse {//...}

আশাকরি এটা সাহায্য করবে!


একটি মূল উপাদান শিলা একটি নাম স্থান যোগ করুন! :-)
কনস্টান্টিন ইভানভ

5

এটি একটি সুন্দর কুলুঙ্গি ক্ষেত্রে ব্যবহারের ক্ষেত্রে সমাধান তবে এটি প্রতিবার আমাকে পেয়ে যায়। আপনি যদি Eclipse Jaxb জেনারেটর ব্যবহার করছেন তবে এটি প্যাকেজ-ইনফরমেশন নামে একটি ফাইল তৈরি করে।

@javax.xml.bind.annotation.XmlSchema(namespace = "blah.xxx.com/em/feed/v2/CommonFeed")
package xxx.blah.mh.domain.pl3xx.startstop;

আপনি যদি এই ফাইলটি মুছে ফেলেন তবে এটি আরও জেনেরিক এক্সএমএল বিশ্লেষণের অনুমতি দেবে। একবার চেষ্টা করে দেখো!


1
এটি তারপরে নিখুঁতভাবে জেগেছিল .. ধন্যবাদ অনেক সাথী .. :)। আমি খালি স্ট্রিংয়ের জন্য উল্লিখিত নেমস্পেসটি তৈরি করেছি।
অরুণদেব

2

আমারও একই সমস্যা ছিল .. এটি আমাকে সহায়তা করেছে, আমি আমার ক্লাসের একই ক্ষেত্রের নামগুলি xML ফাইলের ট্যাগের নাম হিসাবে উল্লেখ করেছি (ফাইলটি একটি বাহ্যিক সিস্টেম থেকে আসে)।

উদাহরণ স্বরূপ:

আমার এক্সএমএল ফাইল:

<Response>
  <ESList>
     <Item>
        <ID>1</ID>
        <Name>Some name 1</Name>
        <Code>Some code</Code>
        <Url>Some Url</Url>
        <RegionList>
           <Item>
              <ID>2</ID>
              <Name>Some name 2</Name>
           </Item>
        </RegionList>
     </Item>
  </ESList>
</Response>

আমার প্রতিক্রিয়া শ্রেণি:

@XmlRootElement(name="Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {
    @XmlElement
    private ESList[] ESList = new ESList[1]; // as the tag name in the xml file..

    // getter and setter here
}

আমার ইএসলিস্ট ক্লাস:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="ESList")
public class ESList {
    @XmlElement
    private Item[] Item = new Item[1]; // as the tag name in the xml file..

    // getters and setters here
}

আমার আইটেম ক্লাস:

@XmlRootElement(name="Item")
@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
    @XmlElement
    private String ID; // as the tag name in the xml file..
    @XmlElement
    private String Name; // and so on...
    @XmlElement
    private String Code;
    @XmlElement
    private String Url;
    @XmlElement
    private RegionList[] RegionList = new RegionList[1];

    // getters and setters here
}

আমার অঞ্চল তালিকা ক্লাস:

@XmlRootElement(name="RegionList")
@XmlAccessorType(XmlAccessType.FIELD)
public class RegionList {
    Item[] Item = new Item[1];

    // getters and setters here
}

আমার ডেমোউমেনশেলিং ক্লাস:

public class DemoUnmarshalling {
    public static void main(String[] args) {
        try {
            File file = new File("...");

            JAXBContext jaxbContext = JAXBContext.newInstance(Response.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            jaxbUnmarshaller.setEventHandler(
                new ValidationEventHandler() {
                    public boolean handleEvent(ValidationEvent event ) {
                        throw new RuntimeException(event.getMessage(),
                            event.getLinkedException());
                    }
                }
            );

            Response response = (Response) jaxbUnmarshaller.unmarshal(file);

            ESList[] esList = response.getESList();
            Item[] item = esList[0].getItem();
            RegionList[] regionLists = item[0].getRegionList();
            Item[] regionListItem = regionLists[0].getItem();

            System.out.println(item[0].getID());
            System.out.println(item[0].getName());
            System.out.println(item[0].getCode());
            System.out.println(item[0].getUrl());
            System.out.println(regionListItem[0].getID());
            System.out.println(regionListItem[0].getName());

        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

এটি দেয়:

1
Some name 1
Some code
Some Url
2
Some name 2

1

আপনার প্রসঙ্গপথেরpackage-info.java প্যাকেজে ক্লাস করা এবং একই শ্রেণিতে কোডের নীচে রাখা দরকার:

@javax.xml.bind.annotation.XmlSchema(namespace = "https://www.namespaceUrl.com/xml/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.test.valueobject;

0

আমার একই. ম্যাপিং ক্লাসের নাম ছিল Mbeanতবে ট্যাগের মূল নাম ছিল mbeanতাই আমাকে টীকা যোগ করতে হয়েছিল:

@XmlRootElement(name="mbean")
public class MBean { ... }

0

আমারো একই ইস্যু ছিল. আমি উপাদানগুলিতে নিম্নোক্ত বৈশিষ্ট্যগুলি যুক্ত করেছি <xs:schema..> ফর্মডেফল্ট = "যোগ্য" বৈশিষ্ট্যফর্মডেফল্ট = "অযোগ্য"

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.example.com/schemas/ArrayOfMarketWithStations"
    targetNamespace="http://www.example.com/schemas/ArrayOfMarketWithStations" 
    elementFormDefault="qualified" attributeFormDefault="unqualified" >

এবং এক্সজেসি চালিয়ে জাভা ক্লাসগুলি পুনরায় জেনারেট করে, যা প্যাকেজ-ইনফো.জভা সংশোধন করে।

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.example.com/schemas/ArrayOfMarketWithStations", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

এটি আমার জন্য সমস্যাটি স্থির করেছে।


0

আমার ইতিমধ্যে একই সমস্যা আছে এবং আমি ঠিক নীচের মত পরিবর্তন করেছি:

@XmlRootElement -> @XmlRootElement(name="Group")

0

আমার একই সমস্যা ছিল, আমার সমস্যাটি ছিল, আমার দুটি ভিন্ন ডাব্লুএসডিএল-ফাইলের সাথে দুটি আলাদা ওয়েবসার্ভিস ছিল। আমি উভয় ওয়েবসার্চির জন্য একই প্যাকেজের উত্স উত্পন্ন করেছি, যা সমস্যা বলে মনে হচ্ছে। আমি অনুমান করি এটি অবজেক্টফ্যাক্টরির কারণে এবং সম্ভবত প্যাকেজ-ইনফো.জভা কারণে - কারণ সেগুলি কেবল একবার তৈরি হয়েছিল।

আমি আলাদাভাবে প্যাকেজে প্রতিটি ওয়েবসার্চির উত্স উত্পন্ন করে সমাধান করেছি। এইভাবে, আপনার কাছে দুটি পৃথক অবজেক্টফ্যাক্টরি এবং প্যাকেজ-ইনফো-জাভা ফাইল রয়েছে।


0

আপনি পাগল হয়ে যাচ্ছেন কারণ এটি কেবলমাত্র আপনার পরীক্ষায় ঘটে এবং আপনি পাওয়ারমক ব্যবহার করছেন এটিই সমাধান, এটি আপনার পরীক্ষার শ্রেণীর শীর্ষে যুক্ত করুন:

@PowerMockIgnore({ "javax.xml.*", "org.xml.*", "org.w3c.*" })

0

এখানে উল্লিখিত কোনও সমাধানই আমার পক্ষে কাজ করেনি, আমি এখনও পাচ্ছিলাম:

থ্রেডের ব্যতিক্রম "প্রধান" জাভ্যাক্স.এক্সএমএল.বাইন্ড।অনমারশাল এক্সেপশন: অপ্রত্যাশিত উপাদান (ইউরি: "জাভা: এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স", স্থানীয়: "এক্সএক্সএক্সএক্সএক্সএক্স)"

কোডের নীচে অন্যান্য সাইটগুলির মাধ্যমে প্রচুর গবেষণার পরে আমার পক্ষে কাজ করেছে-

FileInputStream fis = new FileInputStream("D:/group.xml");
SOAPMessage message = factory.createMessage(new MimeHeaders(), fis);
JAXBContext jc = JAXBContext.newInstance(Group.class);
Unmarshaller u = jc.createUnmarshaller();
JAXBElement<Group> r = u.unmarshal(message.getSOAPBody().extractContentAsDocument(), Group.class);
Group group = r.getValue();

-1

উপরের কোনওটি যদি কাজ না করে তবে যুক্ত করার চেষ্টা করুন

@XmlRootElement(name="Group") গ্রুপ ক্লাসে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.