Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB使用名称空间从StringReader解组到xml_Java_Xml_Spring_Jaxb - Fatal编程技术网

Java JAXB使用名称空间从StringReader解组到xml

Java JAXB使用名称空间从StringReader解组到xml,java,xml,spring,jaxb,Java,Xml,Spring,Jaxb,我有一个ByteArrayInputStream形式的客户端响应,缓冲读取并创建一个StringReader来读取pojo表单中的xml。我想解组它,但我遇到了名称空间问题,因此出现了JAXBException 以下是我收到回复后的代码: public void post() { ... ByteArrayInputStream obj = (ByteArrayInputStream) response.getEntity(); Buffered

我有一个
ByteArrayInputStream
形式的客户端响应,缓冲读取并创建一个StringReader来读取pojo表单中的xml。我想解组它,但我遇到了名称空间问题,因此出现了JAXBException

以下是我收到回复后的代码:

public void post() {
        ...

        ByteArrayInputStream obj = (ByteArrayInputStream) response.getEntity();
        BufferedReader br = new BufferedReader(new InputStreamReader(obj));
        String line = null;
        StringBuffer sb = new StringBuffer();
        try{
            while ((line = br.readLine()) != null){
                System.out.println(line);
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        JAXBContext jaxbContext = JAXBContext.newInstance(FileTransmissionResponse.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

        StringReader reader = new StringReader(sb.toString());
        FileTransmissionResponse transmissionResponse = (FileTransmissionResponse) 
        unmarshaller.unmarshal(reader);

}
StringBuffer
响应是以下字符串格式的xml:

<?xml version="1.0" encoding="UTF-8"?>
<fileTransmissionResponse xmlns="http://abc.xyz.com/schema/auditing/fileResponse-1.1">
   <version>1.0</version>
   <userId>xqas</userId>
   <reNumber>1234</reNumber>
   <reName>1234rfd</reName>
   <status>FAILURE</status>
   <fileName>file.xml</fileName>
   <startTime>2021-04-06T09:16:54.065+10:00</startTime>
   <finishTime>2021-04-06T09:16:54.743+10:00</finishTime>
   <bytesTransferred>15530</bytesTransferred>
   <emailSent>scd@xyz.com</emailSent>
   ....
</fileTransmissionResponse>

1
xqas
1234
1234rfd
失败
file.xml
2021-04-06T09:16:54.065+10:00
2021-04-06T09:16:54.743+10:00
15530
scd@xyz.com
....
波乔班

package com.example.response;

import javax.xml.bind.annotation.*;
import java.util.List;

@XmlRootElement(name = "fileTransmissionResponse")
@XmlType(propOrder = { "version", "userId", "reNumber", "reName", "status", "fileName", "startTime", "finishTime", "bytesTransferred", "totalRead", "totalTransferred", "totalIntercepted", "emailSent", "message"})
@XmlAccessorType(XmlAccessType.PROPERTY)
public class FileTransmissionResponse {

    private String version;
    private String userId;
    private List<String> reNumber;
    private List<String> reName;
    private int status;
    private List<String> fileName;
    private String startTime;
    private String finishTime;
    private List<Integer> bytesTransferred;
    private List<Integer> totalRead;
    private List<Integer> totalTransferred;
    private List<Integer> totalIntercepted;
    private List<String> austracReference;
    private List<String> emailSent;
    private List<ErrorMessage> message;

    public String getVersion() {
        return version;
    }

    @XmlElement(name = "version")
    public void setVersion(final String version) {
        this.version = version;
    }

    public String getUserId() {
        return userId;
    }

    @XmlElement(name = "userId")
    public void setUserId(final String userId) {
        this.userId = userId;
    }

    public List<String> getReNumber() {
        return reNumber;
    }

    @XmlElement(name = "reNumber")
    public void setReNumber(final List<String> reNumber) {
        this.reNumber = reNumber;
    }

    public List<String> getReName() {
        return reName;
    }

    @XmlElement(name = "reName")
    public void setReName(final List<String> reName) {
        this.reName = reName;
    }

    public int getStatus() {
        return status;
    }

    @XmlElement(name = "status")
    public void setStatus(final int status) {
        this.status = status;
    }

    public List<String> getFileName() {
        return fileName;
    }

    @XmlElement(name = "fileName")
    public void setFileName(final List<String> fileName) {
        this.fileName = fileName;
    }

    public String getStartTime() {
        return startTime;
    }

    @XmlElement(name = "startTime")
    public void setStartTime(final String startTime) {
        this.startTime = startTime;
    }

    public String getFinishTime() {
        return finishTime;
    }

    @XmlElement(name = "finishTime")
    public void setFinishTime(final String finishTime) {
        this.finishTime = finishTime;
    }

    public List<Integer> getBytesTransferred() {
        return bytesTransferred;
    }

    @XmlElement(name = "bytesTransferred")
    public void setBytesTransferred(final List<Integer> bytesTransferred) {
        this.bytesTransferred = bytesTransferred;
    }

    public List<Integer> getTotalRead() {
        return totalRead;
    }

    @XmlElement(name = "totalRead")
    public void setTotalRead(final List<Integer> totalRead) {
        this.totalRead = totalRead;
    }

    public List<Integer> getTotalTransferred() {
        return totalTransferred;
    }

    @XmlElement(name = "totalTransferred")
    public void setTotalTransferred(final List<Integer> totalTransferred) {
        this.totalTransferred = totalTransferred;
    }

    public List<Integer> getTotalIntercepted() {
        return totalIntercepted;
    }

    @XmlElement(name = "totalIntercepted")
    public void setTotalIntercepted(final List<Integer> totalIntercepted) {
        this.totalIntercepted = totalIntercepted;
    }

    public List<String> getEmailSent() {
        return emailSent;
    }

    @XmlElement(name = "emailSent")
    public void setEmailSent(final List<String> emailSent) {
        this.emailSent = emailSent;
    }

    public List<ErrorMessage> getMessage() {
        return message;
    }

    @XmlElement(name = "message")
    public void setMessage(final List<ErrorMessage> message) {
        this.message = message;
    }
}


package com.example.response;
导入javax.xml.bind.annotation.*;
导入java.util.List;
@XmlRootElement(name=“fileTransmissionResponse”)
@XmlType(Propoder={“版本”、“用户ID”、“重新编号”、“重命名”、“状态”、“文件名”、“开始时间”、“完成时间”、“ByTestTransfered”、“totalRead”、“TotalTransfered”、“TotalIntercept”、“emailSent”、“message”})
@XmlAccessorType(XmlAccessType.PROPERTY)
公共类FileTransmissionResponse{
私有字符串版本;
私有字符串用户标识;
私人名单重新编号;
私有列表重命名;
私人身份;
私有列表文件名;
私有字符串开始时间;
私有字符串完成时间;
私有列表ByTestTransferred;
私有列表totalRead;
私人名单;
截获私人名单;
澳大利亚参考私人名单;
私人名单电邮;
私有列表消息;
公共字符串getVersion(){
返回版本;
}
@xmlement(name=“version”)
公共无效设置版本(最终字符串版本){
this.version=版本;
}
公共字符串getUserId(){
返回用户标识;
}
@xmlement(name=“userId”)
public void setUserId(最终字符串userId){
this.userId=userId;
}
公共列表getReNumber(){
返回重新编号;
}
@XmlElement(name=“重新编号”)
公共无效集合重新编号(最终列表重新编号){
this.reNumber=重新编号;
}
公共列表getReName(){
返回重命名;
}
@xmlement(name=“重命名”)
公共void setReName(最终列表重命名){
this.reName=重命名;
}
public int getStatus(){
返回状态;
}
@xmlement(name=“status”)
公共无效设置状态(最终int状态){
这个状态=状态;
}
公共列表getFileName(){
返回文件名;
}
@xmlement(name=“fileName”)
public void setFileName(最终列表文件名){
this.fileName=文件名;
}
公共字符串getStartTime(){
返回起始时间;
}
@xmlement(name=“startTime”)
公共无效设置开始时间(最终字符串开始时间){
this.startTime=startTime;
}
公共字符串getFinishTime(){
返回完成时间;
}
@xmlement(name=“finishTime”)
公共void setFinishTime(最终字符串finishTime){
this.finishTime=finishTime;
}
公共列表GetByTestTransferred(){
通过testtransferred返回;
}
@XmlElement(name=“ByTestTransferred”)
公共无效SetByteTransferred(最终列表ByTestTransferred){
this.ByTestTransferred=ByTestTransferred;
}
公共列表getTotalRead(){
返回totalRead;
}
@xmlement(name=“totalRead”)
公共无效setTotalRead(最终列表totalRead){
this.totalRead=totalRead;
}
公共列表getTotalTransferred(){
返回已转移的数据;
}
@XmlElement(name=“TotalTransfer”)
公共无效SetTotalTransfer(最终列表TotalTransfer){
this.totaltransfer=totaltransfer;
}
公共列表GetTotalIntercept(){
截获的返回总数;
}
@XmlElement(name=“totalIntercepted”)
已截获公共void setTotalIntercepted(最终列表totalIntercepted){
this.totalIntercepted=totalIntercepted;
}
公共列表getEmailSent(){
返回已发送的电子邮件;
}
@xmlement(name=“emailSent”)
public void setEmailSent(最终列表emailSent){
this.emailSent=emailSent;
}
公共列表getMessage(){
返回消息;
}
@xmlement(name=“message”)
公共无效设置消息(最终列表消息){
this.message=消息;
}
}

在解组调用之后,由于xmlns名称空间,我得到了一个JAXB异常。避免这种情况的方法有哪些?

您应该使用
FileTransmissionResponse.java
类将
package info.java
文件添加到包中,并定义xml模式

@XmlSchema(namespace = "http://abc.xyz.com/schema/auditing/fileResponse-1.1",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.example.response;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

谢谢,这很有效。有没有其他替代方法?还有一个选项可以为
@XmlRootElement
@XmlElement
定义名称空间参数,但我认为这是最方便的方法。