Java Java EE XML Error

Tron36

Ensign
Dabei seit
Jan. 2011
Beiträge
173
Hallo Leute,

versuche gerade einen Java EE Code über Maven in IntelliJ zu compilieren. Konkret habe ich folgendess Projekt heruntergeladen: https://github.com/dieschnittstelle/org.dieschnittstelle.ess

Habe Java JDK 13 installiert, was auch entsptechend eingestellt ist. Als project language Level ist 8 eingestellt (da eigl. das projekt unter JDK 8 ertsellt werden sollte):
project_SDK.png


Bekomme fehlermeldungen im folgendem Code:
Java:
package org.dieschnittstelle.ess.entities.crm;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apache.logging.log4j.Logger;
import org.dieschnittstelle.ess.entities.GenericCRUDEntity;

/**
* this is an abstraction over different touchpoints (with pos being the most
* prominent one, others may be a service center, website, appsite, etc.)
*
* @author kreutel
*
*/
// jaxb annotations
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://dieschnittstelle.org/ess/entities/crm/ws")
@XmlSeeAlso({StationaryTouchpoint.class,MobileTouchpoint.class})

// jpa annotations
@Entity
// inheritance
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="touchpointType", discriminatorType=DiscriminatorType.STRING)
//@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS);
//@Inheritance(strategy=InheritanceType.JOINED);
@SequenceGenerator(name = "touchpoint_sequence", sequenceName = "touchpoint_id_sequence")

// jrs/jackson annotations
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class AbstractTouchpoint implements Serializable, GenericCRUDEntity {

    protected static Logger logger = org.apache.logging.log4j.LogManager.getLogger(AbstractTouchpoint.class);


    /**
     *
     */
    private static final long serialVersionUID = 5207353251688141788L;

   
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "touchpoint_sequence")
    protected long id;

    /**
     * the id of the PointOfSale from the erp data
     */
    protected long erpPointOfSaleId;

    /**
     * the name of the touchpoint
     */
    protected String name;

    /*
     * UE JWS2: kommentieren Sie @XmlTransient aus
     */
    @XmlTransient
    @ManyToMany
    private Collection<Customer> customers = new HashSet<Customer>();
   
    @XmlTransient
    @OneToMany(mappedBy="touchpoint")
    private Collection<CustomerTransaction> transactions;


    public AbstractTouchpoint() {
        logger.info("<constructor>");
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public long getErpPointOfSaleId() {
        return erpPointOfSaleId;
    }

    public void setErpPointOfSaleId(long erpPointOfSaleId) {
        this.erpPointOfSaleId = erpPointOfSaleId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // this annotation must be set on accessor methods rather than on the attributes themselves
    @JsonIgnore
    public Collection<Customer> getCustomers() {
        return customers;
    }

    public void setCustomers(HashSet<Customer> customers) {
        this.customers = customers;
    }

    public void addCustomer(Customer customer) {
        this.customers.add(customer);
    }

    public boolean equals(Object obj) {

        if (obj == null || !(obj instanceof AbstractTouchpoint)) {
            return false;
        }

        return this.getId() == ((AbstractTouchpoint) obj).getId();
    }

    @JsonIgnore
    public Collection<CustomerTransaction> getTransactions() {
        return transactions;
    }

    public void setTransactions(Collection<CustomerTransaction> transactions) {
        this.transactions = transactions;
    }

}
Die fehlermeldungen sind folgende:
Code:
Error:(18,33) java: package javax.xml.bind.annotation does not exist
Error:(19,33) java: package javax.xml.bind.annotation does not exist
Error:(20,33) java: package javax.xml.bind.annotation does not exist
Error:(21,33) java: package javax.xml.bind.annotation does not exist
Error:(22,33) java: package javax.xml.bind.annotation does not exist
Error:(38,2) java: cannot find symbol
Error:(39,2) java: cannot find symbol
Error:(40,2) java: cannot find symbol
Error:(38,18) java: cannot find symbol
Error:(82,10) java: cannot find symbol
Error:(86,10) java: cannot find symbol
Ich hoffe Ihr könnt mir weiter helfen.

Lg
Tron36
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.336
Das dürfte daran liegen, dass ab Java 9 ziemlich viel umstrukturiert wurde, manche Teile sind aus dem JDK geflogen, andere wurden sehr gut versteckt.

TL;DR
Du musst in deiner pom.xml noch ein paar Dependencies hinterlegen. Im Speziellen:
Code:
<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.1</version>
</dependency>
Möglicherweise gibt's danach neue Fehlermeldungen. Aber das wirst du dann ja schon sehen.

Alternativ kannst du dir auch einfach JDK 8 parallel zu deinem JDK 13 installieren und dann ausschließlich für dieses Projekt verwenden.

Als Masterstudent sollte man aber in der Lage sein, Google zu benutzen ;) https://www.google.com/search?q="package+javax.xml.bind.annotation+does+not+exist"
 

Andreas_

Commander
Dabei seit
Jan. 2017
Beiträge
2.109
The JAXB APIs are considered to be Java EE APIs and therefore are no longer contained on the default classpath in Java SE 9. In Java 11, they are completely removed from the JDK.
Das hättest Du sicher auch selbst gefunden. Die API gibt es in Java 13 einfach nicht mehr.

Hier gibt es einen workaround:
https://stackoverflow.com/questions/43574426/how-to-resolve-java-lang-noclassdeffounderror-javax-xml-bind-jaxbexception-in-j

Auch einfach zu finden ...
 

abcddcba

Lt. Commander
Dabei seit
Juni 2018
Beiträge
1.970
Jap, du kannst in der Regel davon ausgehen, dass du nicht der erste mit einem Problem in Java bist ... also mal ganz ehrlich, warum nutzt du nicht immer zuerst Google oder was auch immer? Wenn du dann etwas nicht findest, dann ist es natürlich sinnvoll in einem Forum nachzufragen. Aber so bist du doch faktisch erstmal viel schneller und kannst direkt weitermachen.

Dann viel Erfolg!

PS: der Name dieschnittstelle ist auf jeden Fall ein Highlight
 
Top