Как я могу преобразовать документ XML в целевую структуру шаблона XML (сокращенные атрибуты / элементы), используя Java - PullRequest
0 голосов
/ 03 марта 2019

Я ищу способ преобразования XML на основе шаблона xml, предоставленного пользователем.У меня есть служба Springboot, которая генерирует вывод, вот пример bsic, но есть дополнительные вложенные элементы под тегом «Продукт» с налогами и т. Д., А также для этой позиции ...

  1. EntityКлассы

OrderHeader

package com.example.microservice.dao;    

import java.util.List;    

import javax.persistence.Column;    
import javax.persistence.Entity;    
import javax.persistence.Id;    
import javax.persistence.JoinColumn;    
import javax.persistence.ManyToOne;    
import javax.persistence.OneToMany;    
import javax.persistence.Table;    

import com.fasterxml.jackson.annotation.JsonProperty;    

@Entity    
@Table(name="ORDER_HEADER")    
public class OrderHeader {    
    @Id    
    @Column(name="ORDER_HEADER_KEY", nullable=false)    
    private String orderHeaderKey;    
    @Column(name="ORDER_NO", nullable=false)    
    private String orderNo;    
    @Column(name="ENTERPRISE_KEY", nullable=false)    
    private String enterpriseKey;    
    @Column(name="SHIP_TO_KEY", nullable=false)    
    private String shipToKey;
    @Column(name="PAYMENT", nullable=false)    
    private String payment;     
    @Column(name="AUTHORISED", nullable=false)    
    private String authorised;      
    @Column(name="CUSTOMER", nullable=false)    
    private String customer;

    @OneToMany(mappedBy="oHeader")    
    private List<OrderLine> orderlines;    

    public OrderHeader() {    
        super();    
        // TODO Auto-generated constructor stub    
    }    
    public OrderHeader(String orderHeaderKey, String orderNo, String enterpriseKey, String shipToKey) {    
        super();    
        this.orderHeaderKey = orderHeaderKey;    
        this.orderNo = orderNo;    
        this.enterpriseKey = enterpriseKey;    
        this.shipToKey = shipToKey;    
    }       
// Getters & Setters    
//To String method override    
}  

OrderLine Класс сущности

package com.example.microservice.dao;    

import java.util.List;    
import javax.persistence.Column;    
import javax.persistence.Entity;    
import javax.persistence.Id;    
import javax.persistence.JoinColumn;    
import javax.persistence.ManyToOne;    
import javax.persistence.OneToMany;    
import javax.persistence.Table;    

@Entity    
@Table(name="ORDER_LINE")    
public class OrderLine {        
    @Id    
    @Column(name="ORDER_LINE_KEY")    
    private String orderLineKey;    
    @Column(name="ORDER_HEADER_KEY")    
    private String orderHeaderKey;    
    @Column(name="ITEM_ID")    
    private String itemID;    
    @Column(name="PRIME_LINE_NO")    
    private String primeLineNo;    
    @Column(name="ORDERED_QTY")    
    private String orderedQty;    
    @Column(name="LINE_TOTAL")    
    private String lineTotal;       
    @ManyToOne    
    @JoinColumn(name = "ORDER_HEADER_KEY",referencedColumnName="ORDER_HEADER_KEY", insertable=false, updatable=false)    
    private OrderHeader oHeader;    

// Geters & Setters    
// To String override    
}

Метод контроллера MicroService

@RestController    
public class MicroServiceController {    

@Autowired    
OrderHeaderRepository orderHeaderRepo;    
@Autowired    
OrderLineRepository orderLineRepo;    

public MicroServiceController() {    
    // TODO Auto-generated constructor stub    
}    


@RequestMapping(path="/order/{orderID}",    
        method= {RequestMethod.POST})    
 public List<OrderHeader>  orderInfoID(@PathVariable(name="orderID") String orderID, @RequestBody String userPreferedTemplate) {    
    System.out.println("API output template from user----->"+userPreferedTemplate);    

    List<OrderHeader> oH = orderHeaderRepo.findByOrderHeaderKey(orderID);    
    System.out.println("JPA Query output for order entity \n"+oH.toString());    

    return oH;    
}    

}    

Ответ на вышеприведенный код такой же, как и ниже, с возвращением целых атрибутов в порядке и на уровне продукта.

    <Order OrderNumber="223344" Customer="Bob" Payment="CreditCard" Authorised="Y">    
    <Product Line="1" ProductId="Item_1001" Quantity="2.00" LineTotal="200"  />    
    <Product Line="2" ProductId="Item_1002" Quantity="2.00" LineTotal="400"  />    
    <Product Line="3" ProductId="Item_1003" Quantity="2.00" LineTotal="600"  />       
    </Order>
Пользователь отправляет запрос POST в конечную точку вместе с шаблоном, указывающим интересующие его атрибуты:

POSTMAN_REQ_IMAGE

enter image description here

Запрошенные пользователем атрибуты взамен

<Order OrderNumber="" >
<Product Line="" ProductId="" />
</Order>
На основе шаблона, полученного от пользователя веб-службы на шаге 4, возможно ли обрезать выходные данные в методе контроллера step2 и отправлять только соответствующие элементы и атрибуты в ответ.

    <Order OrderNumber="223344" >       
    <Product Line="1" ProductId="Item_1001" />    
    <Product Line="2" ProductId="Item_1002" />    
    <Product Line="3" ProductId="Item_1003" />    
    <Product Line="4" ProductId="Item_1004" />      
    </Order>  

** если пользователь пропустит недопустимый тег в шаблоне

<Order OrderNumber="" >
<ProductLINESSSS Line="" ProductId="" />
</Order>

, тогда такие теги будут игнорироваться, и вывод будет выглядеть как

<Order OrderNumber="223344" > 
</Order>

Причиной этого является Заказ, поскольку организация имеет отношения с продуктами, адресом доставки, адресом для выставления счета и т. Д., Платежами ... для пользователя, который хочет получить информацию о клиенте, используя № заказа, остальную информацию о продукте, адрес, платежне имеет значения.для приложений, которые хотят получить продукт, могут предоставить шаблон соответственно.

Также

Я не уверен, что у JPA есть что-то для достижения этого или преобразование xslt может это сделать, но будет признателен за правильные данныеподход к достижению этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...