gpt4 book ai didi

java - 解码时出现 JAXB 意外元素错误

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:51 24 4
gpt4 key购买 nike

如果有人能为我的问题找到解决方案,我将不胜感激......

从我的 WebService 调用 Web 方法时出现以下错误:

[com.sun.istack.SAXParseException2; lineNumber: 1; columnNumber: 223; unexpected element (uri:"", local:"sport"). Expected elements are <{}mostFavored>,<{}teamA>,<{}teamB>,<{http://sdl.ws.lsep.lskings.com/}scoring>,<{http://sdl.ws.lsep.lskings.com/}sport>,<{}gameId>,<{http://sdl.ws.lsep.lskings.com/}gameScoring>]

我想知道为什么消息包含元素“sport”以及为什么它与 <{http://sdl.ws.lsep.lskings.com/}sport> 不匹配。我认为这与 namespace 有关,但我无法解决该问题,到目前为止我已经被困了 2 个晚上......

我正在使用 JBossWS 工具生成客户端 Web 服务,所有内容都部署在 JBoss 7.1.1 上(但我认为这不相关)。请至少给我任何线索:)

这是 GameScoring 类:

@Entity
@Table(name = "`GAMESCORING`")
@XmlRootElement
@XmlType(name = "GameScoring", propOrder = { "gameScoringId", "scoring", "finished", "startTime", "stopTime",
"tiebreak" })
public class GameScoring implements Serializable {
@Id
@GeneratedValue
@Column(name = "game_scoring_id")
private long gameScoringId;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "scoring")
private List<GamePeriod> periods;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "scoring_id")
private Scoring scoring;

private boolean finished;

private Date startTime;

private Date stopTime;

private GamePeriod tiebreak;

public GameScoring() {
super();
}

和客户端生成的同一个类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "GameScoring", propOrder = {
"gameScoringId",
"scoring",
"finished",
"startTime",
"stopTime",
"tiebreak"
})

public class GameScoring {

protected long gameScoringId;
@XmlElement(namespace = "http://sdl.ws.lsep.lskings.com/")
protected Scoring scoring;
protected boolean finished;
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar startTime;
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar stopTime;
protected GamePeriod tiebreak;
+ getters/setters

我如何调用网络服务方法:

GameManagerService gm_service = new GameManagerService();
GameManagerPortType gm_port = gm_service.getGameManagerPort();
com.lskings.lsep.ws.sdl.Game game = gm_port.getMostFavored();

这里是 web 服务 SEI:

@WebService(name = "GameManagerPortType")
@SOAPBinding(style = Style.RPC, use = Use.LITERAL)
public interface GameManagerEndpoint {

@WebMethod
@WebResult(name = "success")
public boolean addGame(
@WebParam(name = "sportId") String sportId,
@WebParam(name = "leagueId") String leagueId,
@WebParam(name = "scoringId") String scoringId,
@WebParam(name = "participantHomeId") long participantHomeId,
@WebParam(name = "participantAwayId") long participantAwayId);

@WebMethod
@WebResult(name = "success")
public boolean deleteGame(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "exists")
public boolean exists(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "game")
public Game getGame(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "gameList")
public List<Game> getGamesForLeague(@WebParam(name = "leagueId") long leagueId);

@WebMethod
@WebResult(name = "gameList")
public List<Game> search(@WebParam(name = "query") String query);

@WebMethod
@WebResult(name = "gameList")
public List<Game> getGamesForSport(@WebParam(name = "sportId") long sportId);

@WebMethod
@WebResult(name = "game")
public Game getMostFavored();

@WebMethod
@WebResult(name = "success")
public boolean setMostFavored(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "gamePeriods")
public List<GamePeriod> getPeriods(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "gamePeriodsWithTiebreaks")
public List<GamePeriod> getPeriodsWithTiebreaks(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "gameScore")
public int[] getScore(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "periodActions")
public List<GameAction> getPeriodActions(@WebParam(name = "periodId") long periodId);

@WebMethod
@WebResult(name = "allActions")
public List<GameAction> getAllActions(@WebParam(name = "gameId") long gameId);

@WebMethod
@WebResult(name = "gameTimer")
public String getGameTimer(@WebParam(name = "gameId") long gameId);

}

完整的堆栈跟踪:

http://pastebin.com/9pfCNFcw

Game.java - 服务器端

 @Entity
@Table(name = "`GAME`")
@XmlRootElement
@XmlType(name = "Game", propOrder = { "gameId", "sport", "mostFavored" })
public class Game implements Serializable {

private static final long serialVersionUID = -1564911377701558631L;

@Id
@GeneratedValue
@Column(name = "game_id")
private long gameId;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "sport_id")
private Sport sport;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "scoring_id")
private Scoring scoring;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "game_scoring_id")
private GameScoring gameScoring;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "teamA_id")
private Participant teamA;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "teamB_id")
private Participant teamB;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "league_id")
private League league;

@Column(name = "most_favored")
private boolean mostFavored;

public Game() {
super();
}

public Game(Sport sport, Scoring scoring, Participant teamA, Participant teamB) {
this(sport, scoring, teamA, teamB, null);
}

public Game(Sport sport, Scoring scoring, Participant teamA, Participant teamB, League league) {
super();
this.sport = sport;
this.scoring = scoring;
this.teamA = teamA;
this.teamB = teamB;
this.league = league;
this.mostFavored = false;

LinkedList<GamePeriod> periods = new LinkedList<GamePeriod>();

this.gameScoring = new GameScoring();

Period p = scoring.getPeriods().get(0);
GamePeriod gp = new GamePeriod(p, gameScoring);
periods.add(gp);
gp.generateParents(true);

gameScoring.setPeriods(periods);
gameScoring.setScoring(scoring);
}

public Sport getSport() {
return sport;
}

@XmlTransient
public Scoring getScoring() {
return scoring;
}

@XmlTransient
public Participant getTeamA() {
return teamA;
}

@XmlTransient
public Participant getTeamB() {
return teamB;
}

@XmlTransient
public GameScoring getGameScoring() {
return gameScoring;
}

public void setSport(Sport sport) {
this.sport = sport;
}

public void setScoring(Scoring scoring) {
this.scoring = scoring;
}

public void setGameScoring(GameScoring gameScoring) {
this.gameScoring = gameScoring;
}

public void setTeamA(Participant teamA) {
this.teamA = teamA;
}

public void setTeamB(Participant teamB) {
this.teamB = teamB;
}

public long getGameId() {
return gameId;
}

public void setGameId(long gameId) {
this.gameId = gameId;
}

@XmlTransient
public League getLeague() {
return league;
}

public void setLeague(League league) {
this.league = league;
}

public boolean isMostFavored() {
return mostFavored;
}

public void setMostFavored(boolean mostFavored) {
this.mostFavored = mostFavored;
}

}

Game.java - 客户端:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Game", propOrder = {
"gameId",
"sport",
"mostFavored"
})
public class Game {

protected long gameId;
// @XmlElement(namespace = "http://sdl.ws.lsep.lskings.com/")
protected Sport sport;
protected boolean mostFavored;

/**
* Gets the value of the gameId property.
*
*/
public long getGameId() {
return gameId;
}

/**
* Sets the value of the gameId property.
*
*/
public void setGameId(long value) {
this.gameId = value;
}

/**
* Gets the value of the sport property.
*
* @return
* possible object is
* {@link Sport }
*
*/
public Sport getSport() {
return sport;
}

/**
* Sets the value of the sport property.
*
* @param value
* allowed object is
* {@link Sport }
*
*/
public void setSport(Sport value) {
this.sport = value;
}

/**
* Gets the value of the mostFavored property.
*
*/
public boolean isMostFavored() {
return mostFavored;
}

/**
* Sets the value of the mostFavored property.
*
*/
public void setMostFavored(boolean value) {
this.mostFavored = value;
}

}

最佳答案

前几天发现跟@ManyToOne和@ManyToMany JPA注解有关。但是,我不确定为什么在使用这些注释时失败,@XmlTransient 注释解决了它。之后我只需要编写一些额外的代码来通过 id 获取相关对象。

关于java - 解码时出现 JAXB 意外元素错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com