Получение всех записей после преобразования JAXBElement в String - PullRequest
0 голосов
/ 13 февраля 2020

Я получаю последний заказ от FindOrderResponseType. Затем я пытаюсь преобразовать JAXBElement в строку. Но почему-то я получаю все записи, игнорируя последнюю запись, которую я отфильтровал изначально.

<code>    public GetOrderResponseType findOrderBySoloOrderId(String soloOrderId)  {

        log.info("Entering findOrderBySoloOrderId for OSMClient..." );

        FindOrderRequestType findOrderRequestType = new FindOrderRequestType();
        ViewBy viewBy = new ViewBy();
        String view = "COMOrchestrationCreationTask";
        viewBy.getView().add(view);
        findOrderRequestType.setViewBy(viewBy);

        SelectBy selectBy = new SelectBy();
        selectBy.setOrderType("CharterNG_COM_OrchestrationOrder");

        Field field = new Field();
        field.setPath("/Order/OrderInfo/SoloOrderId");
        field.setEqualTo(soloOrderId);
        selectBy.getField().add(field);
        findOrderRequestType.setSelectBy(selectBy);

        //ObjectMapper mapper = new ObjectMapper();

        GetOrderResponseType latestOrder = new GetOrderResponseType();

        try {   
            //mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            //String findOrderResponseTypeStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(getOSMService(osmServiceUrl).findOrder(findOrderRequestType));
            FindOrderResponseType findOrderResponseType = 
                    getOSMService(osmServiceUrl).findOrder(findOrderRequestType);
            List<GetOrderResponseType> orders = findOrderResponseType.getOrder();


            Comparator<GetOrderResponseType> cmp = new Comparator<GetOrderResponseType>() {
                @Override
                public int compare(GetOrderResponseType getOrderResponseType1, GetOrderResponseType getOrderResponseType2) {
                    return getOrderResponseType1.getOrderSummary().getCreatedDate().toGregorianCalendar().compareTo(getOrderResponseType2.getOrderSummary().getCreatedDate().toGregorianCalendar());
                }
            };

            latestOrder = Collections.max(orders, cmp);
            log.info("order = " + latestOrder.getOrderSummary().getId());

            List<Object> objs = latestOrder.getData().getAny();


            for (Object obj : objs) {                           

                Node node = (Node)obj;

                TransformerFactory transFactory = TransformerFactory.newInstance();
                Transformer transformer = transFactory.newTransformer();
                StringWriter buffer = new StringWriter();
                transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
                transformer.transform(new DOMSource(node),
                      new StreamResult(buffer));
                String str = buffer.toString();


                log.info("Printing obj in string = " + str);
                final Pattern pattern = Pattern.compile("<msg(.+?)</msg>", Pattern.DOTALL);
                final Matcher matcher = pattern.matcher(str);
                matcher.find();
                log.info(matcher.group(1)); 
                String msgStr = "<msg" + matcher.group(1) + "</msg>" ;
                log.info("message string = " + msgStr);

            }


            return latestOrder;
        } catch (FindOrderFaultMsg1 e) {
            throw new OSMException("TOS_ORD_10011 :: "+e.getMessage(),e);
        } catch (FindOrderFaultMsg2 e) {
            throw new OSMException("TOS_ORD_10011 :: "+e.getMessage(),e);
        } 
        /*
        catch (JsonProcessingException e) {
            //e.printStackTrace();
            throw new OSMException("Failed to remove null values from FindResponseType..." + e);
        }  */ catch (TransformerException e) {
            throw new IllegalStateException(e);

        } 


    } 

Here is OrderDataType class.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "OrderDataType", propOrder = {
    "any"
})
public class OrderDataType {

    @XmlAnyElement(lax = true)
    protected List<Object> any;

    /**
     * Gets the value of the any property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the any property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getAny().add(newItem);
     * 
* * *

* В списке разрешены объекты следующих типов * * {@link Object} * {@link Element} * * * / publi c Список getAny () {if (any == null) {any = new ArrayList (); } вернуть this.any; }}

Я хотел бы получить последнюю информацию о заказе в String, чтобы позже я мог проанализировать часть сообщения.

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