当前位置: 首页 > 知识库问答 >
问题:

无法用resttemplate jaxb解组响应体

宦正诚
2023-03-14

我想从xsd生成java类,然后用resttemplate解封它。我想出了如何生成它。但在得到响应后,resttemplate抛出了一个错误。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="GameIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="UniqueGameID" type="xs:string" maxOccurs="1" minOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
<parent>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>2.2</version>
            <type>maven-plugin</type>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.12</version>
        </dependency>

        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.11</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.2.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>xjc</id>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>

                    <outputDirectory>src/main/java</outputDirectory>
                    <clearOutputDir>false</clearOutputDir>
                    <packageName>swe.game.model</packageName>
                    <schemaDirectory>src/main/resources/xsd/</schemaDirectory>
                    <schemaFiles>gameId.xsd</schemaFiles>
                    <schemaFiles>gameState.xsd</schemaFiles>
                    <schemaFiles>halfMap.xsd</schemaFiles>
                    <schemaFiles>playerRegistration.xsd</schemaFiles>
                    <schemaFiles>responseEnvelope.xsd</schemaFiles>
                    <schemaFiles>responseEnvelopeUniqueId.xsd</schemaFiles>
                </configuration>
            </plugin>

        </plugins>
    </build>

这是我生成的类的外观:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "uniqueGameID"
})
@XmlRootElement(name = "GameIdentifier")
public class GameIdentifier {

    @XmlElement(name = "UniqueGameID", required = true)
    protected String uniqueGameID;

    /**
     * Gets the value of the uniqueGameID property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getUniqueGameID() {
        return uniqueGameID;
    }

    /**
     * Sets the value of the uniqueGameID property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setUniqueGameID(String value) {
        this.uniqueGameID = value;
    }
}

我是这样称呼它的:

私有静态最终记录器log=LoggerFactory.getLogger(NetworkManager.Class);

try {
  URL url = new URL(BASE + PORT + "game/new");
  log.info("" + url.toURI());
  RestTemplate restTemplate = new RestTemplate();

  gameIdentifierMessage = restTemplate.getForObject(url.toURI(), GameIdentifier.class);

  log.info(gameIdentifierMessage.toString());
} catch (Exception e) {
  log.error(e.getLocalizedMessage());
}

共有1个答案

齐雅畅
2023-03-14

GameIdentifier中的注释与提供的xml不匹配。您的xml应该如下所示:

<GameIdentifier>
    <UniqueGameID>zL07H</UniqueGameID>
</GameIdentifier>

或者必须将@XMLRootElement(名称=“GameIdentifier”)更改为@XMLRootElement(名称=“UniqueGameIdentifier”);(内部元素的更改相同)

 类似资料:
  • 问题内容: 我正在尝试从FlickR解析JSON响应,但是遇到了困难。我已经进行了一些测试,并且收到200的响应代码,并且能够使用日志记录拦截器查看实际的JSON。 但是,当我尝试访问JSON对象时,我收到了一个空指针。我觉得这与我的映射/ JSON到POJO有关: 相片: 照片: JSON响应: LOGCAT 72行 问题答案: 您的课程不适合服务器 响应, 因此您的身体为 Null 。您的模型

  • 我希望有人能帮我解决这个问题。 我想用WebClient创建一个Rest客户端,从API中检索响应。所以我创建了我的Spring项目,添加了webflux、lombok和h2。我还创建了一个DTO类“CashAccount”和以下方法: 当我使用“.bodyToMono(String.class)”时,所有的功能都很好,我收到了结果: 相反,当我使用“.bodyToMono(cashcount.c

  • 我在研究项目中使用GraphDB Free 8.4.1,有时它无法响应请求。GraphDB日志中没有错误和异常,GraphDB以默认配置作为服务器工作台运行。 然而,我在组件中有一个例外,那就是请求GraphDB服务器。 例外情况是: 发生异常的代码段: 你能帮我找出问题出在哪里吗? 非常感谢!

  • 当试图使用Apache Commons Net 3.3 FTPSClient针对Mina的Apache FTP Server执行命令时,列表解析失败。 我已经做了一些调试,在读取服务器列表后,上的属性包含如下格式的条目:

  • 我刚刚将我的Gradle更新到3.4.1。我的一个模块内有一个API调用。我正在使用应用程序内的模块: 现在,当我用ProGuard生成一个签名的构建时,对象为空,这意味着retrofit不能解析该对象。 附注:在调试模式下,或者我用Gradle版本3.3.2运行应用程序时,这很好 我的改造ProGuard文件: 我的OkHttp proGuard文件: 我的GSON proguard文件: