首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax客户端- javax.ws.rs.ProcessingException: javax/xml/bind/批注/Xml瞬态

javax客户端- javax.ws.rs.ProcessingException: javax/xml/bind/批注/Xml瞬态
EN

Stack Overflow用户
提问于 2020-09-01 10:49:10
回答 1查看 747关注 0票数 1

我正在使用Java1.7,并试图创建一个客户机来查询REST。

但是,在执行客户端时,我会得到以下错误。我在REST服务中放置了一个断点,但从未到达。

误差

代码语言:javascript
复制
javax.ws.rs.ProcessingException: javax/xml/bind/annotation/XmlTransient

问题

知道我怎么治好客户吗?

pom.xml

代码语言:javascript
复制
    <!-- JAX-RS 2.x Client RI -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
    </dependency>

Client.java

代码语言:javascript
复制
import javax.ws.rs.BadRequestException;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

private static final String approvalSubmitUrl = "http://localhost:8081/rest/approvals-status/{evaluationRequestId}";

public Object getStatus(String evaluationRequestId, EvaluationProvidedNotification providedNotification) {
    logger.info(approvalSubmitUrl);
    EvaluationProvidedNotificationDTO evaluationProvidedNotificationDTO = new EvaluationProvidedNotificationDTO();
    map(providedNotification, evaluationProvidedNotificationDTO);
    try {
        logger.info("Sending request to get status from " + approvalSubmitUrl + " (nexct-approval-service)");
        Client client = ClientBuilder.newClient();
        WebTarget target = client.target(approvalSubmitUrl);
        Response response = target.queryParam("evaluationRequestId", evaluationRequestId)
                .request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(evaluationProvidedNotificationDTO));
        StatusResponse statusResponse = response.readEntity(StatusResponse.class);
        logger.info("Successfully got the status: " + statusResponse.status );
    }
    catch (BadRequestException refused) {
        logger.error("Request to: " + approvalSubmitUrl + " REFUSED: " + refused.getMessage());
    }
    catch (Exception e) {
        logger.error("Failed to get status from " + approvalSubmitUrl, e);
    }
    return null;
}

该服务仅供参考,因为我确信该错误是客户端错误的结果。

Service.java (Springboot与Java 14)

代码语言:javascript
复制
@PostMapping(value = "/rest/approvals-status/{evaluationRequestId}", consumes=MediaType.APPLICATION_JSON_VALUE, produces={MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
public @ResponseBody ResponseEntity<StatusDTO> getStatus(@PathVariable String evaluationRequestId, @RequestBody EvaluationProvidedNotificationDTO providedNotificationDTO) {
    StatusDTO status = new StatusDTO();
    status.setEvaluationRequestId(evaluationRequestId);
    if (providedNotificationDTO.outcome == EvaluationProvidedNotificationDTO.Evaluation.Approved) {
        if (pendingApprovals(evaluationRequestId)) {
            status.setStatus(StatusDTO.Status.Wait);
        } else {
            status.setStatus(StatusDTO.Status.Proceed);
        }
    } else {
        status.setStatus(StatusDTO.Status.Wait);
    }
    return ResponseEntity.ok(status);
}

这是要张贴的对象:

EvaluationProvidedNotificationDTO.java

代码语言:javascript
复制
public class EvaluationProvidedNotificationDTO {

    public enum Evaluation {
        Approved, Rejected;
    }

    //any contraints on the request for example cost constraints
    public List<Serializable> constraints;

    //the outcome of the evaluation
    public Evaluation outcome;

    //any messages that the evaluator wants to send to the requestor
    public String messageToRequestor;

    public List<Serializable> getConstraints() {
        return constraints;
    }

    public void setConstraints(List<Serializable> constraints) {
        this.constraints = constraints;
    }

    public Evaluation getOutcome() {
        return outcome;
    }

    public void setOutcome(Evaluation outcome) {
        this.outcome = outcome;
    }

    public String getMessageToRequestor() {
        return messageToRequestor;
    }

    public void setMessageToRequestor(String messageToRequestor) {
        this.messageToRequestor = messageToRequestor;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-01 11:52:13

通过将POJO转换为JSON,我成功地修复了这个问题:

代码语言:javascript
复制
        Invocation.Builder builder = target.request();
        Gson gson = new Gson();
        String json = gson.toJson(evaluationProvidedNotificationDTO);
        Entity entity = Entity.entity(json, MediaType.APPLICATION_JSON_TYPE);
        Response response = builder.post(entity);
        StatusResponse statusResponse = response.readEntity(StatusResponse.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63686186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档