【问题标题】:Using SoapUi Generated POJO使用 SoapUi 生成的 POJO
【发布时间】:2018-11-03 04:46:54
【问题描述】:

我使用soapUi从WSDL生成Java Pojo,生成的类之一如下FACValidatyRequest

package com.innovectives.octopus.gt.bank.agency.common.dto;

import javax.xml.stream.XMLStreamException;
import org.apache.axis2.databinding.ADBException;


/**
 *  FacValidityRequest bean class
 */
@SuppressWarnings({"unchecked",
"unused"
})
public class FacValidityRequest implements org.apache.axis2.databinding.ADBBean {
/* This type was generated from the piece of schema that had
   name = FacValidityRequest
   Namespace URI = http://tempuri.org/
   Namespace Prefix = ns1
 */

/**
 * field for FACCode
 */
protected java.lang.String localFACCode;

/*  This tracker boolean wil be used to detect whether the user called the set method
 *   for this attribute. It will be used to determine whether to include this field
 *   in the serialized XML
 */
protected boolean localFACCodeTracker = false;

/**
 * field for MobileNumber
 */
protected java.lang.String localMobileNumber;

/*  This tracker boolean wil be used to detect whether the user called the set method
 *   for this attribute. It will be used to determine whether to include this field
 *   in the serialized XML
 */
protected boolean localMobileNumberTracker = false;

/**
 * field for UniqueId
 */
protected java.lang.String localUniqueId;

/*  This tracker boolean wil be used to detect whether the user called the set method
 *   for this attribute. It will be used to determine whether to include this field
 *   in the serialized XML
 */
protected boolean localUniqueIdTracker = false;

/**
 * field for Hash
 */
protected java.lang.String localHash;

/*  This tracker boolean wil be used to detect whether the user called the set method
 *   for this attribute. It will be used to determine whether to include this field
 *   in the serialized XML
 */
protected boolean localHashTracker = false;

public boolean isFACCodeSpecified() {
    return localFACCodeTracker;
}

/**
 * Auto generated getter method
 * @return java.lang.String
 */
public java.lang.String getFACCode() {
    return localFACCode;
}

/**
 * Auto generated setter method
 * @param param FACCode
 */
public void setFACCode(java.lang.String param) {
    localFACCodeTracker = param != null;

    this.localFACCode = param;
}

public boolean isMobileNumberSpecified() {
    return localMobileNumberTracker;
}

/**
 * Auto generated getter method
 * @return java.lang.String
 */
public java.lang.String getMobileNumber() {
    return localMobileNumber;
}

/**
 * Auto generated setter method
 * @param param MobileNumber
 */
public void setMobileNumber(java.lang.String param) {
    localMobileNumberTracker = param != null;

    this.localMobileNumber = param;
}

public boolean isUniqueIdSpecified() {
    return localUniqueIdTracker;
}

/**
 * Auto generated getter method
 * @return java.lang.String
 */
public java.lang.String getUniqueId() {
    return localUniqueId;
}

/**
 * Auto generated setter method
 * @param param UniqueId
 */
public void setUniqueId(java.lang.String param) {
    localUniqueIdTracker = param != null;

    this.localUniqueId = param;
}

public boolean isHashSpecified() {
    return localHashTracker;
}

/**
 * Auto generated getter method
 * @return java.lang.String
 */
public java.lang.String getHash() {
    return localHash;
}

/**
 * Auto generated setter method
 * @param param Hash
 */
public void setHash(java.lang.String param) {
    localHashTracker = param != null;

    this.localHash = param;
}

/**
 *
 * @param parentQName
 * @param factory
 * @return org.apache.axiom.om.OMElement
 * @throws org.apache.axis2.databinding.ADBException
 */
@Override
public org.apache.axiom.om.OMElement getOMElement(
    final javax.xml.namespace.QName parentQName,
    final org.apache.axiom.om.OMFactory factory)
    throws org.apache.axis2.databinding.ADBException {
    return factory.createOMElement(new org.apache.axis2.databinding.ADBDataSource(
            this, parentQName));
}

/**
 *
 * @param parentQName
 * @param xmlWriter
 * @throws XMLStreamException
 * @throws ADBException
 */
@Override
public void serialize(final javax.xml.namespace.QName parentQName,
    javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException,
        org.apache.axis2.databinding.ADBException {
    serialize(parentQName, xmlWriter, false);
}

/**
 *
 * @param parentQName
 * @param xmlWriter
 * @param serializeType
 * @throws XMLStreamException
 * @throws ADBException
 */
@Override
public void serialize(final javax.xml.namespace.QName parentQName,
    javax.xml.stream.XMLStreamWriter xmlWriter, boolean serializeType)
    throws javax.xml.stream.XMLStreamException,
        org.apache.axis2.databinding.ADBException {
    java.lang.String prefix = null;
    java.lang.String namespace = null;

    prefix = parentQName.getPrefix();
    namespace = parentQName.getNamespaceURI();
    writeStartElement(prefix, namespace, parentQName.getLocalPart(),
        xmlWriter);

    if (serializeType) {
        java.lang.String namespacePrefix = registerPrefix(xmlWriter,
                "http://tempuri.org/");

        if ((namespacePrefix != null) &&
                (namespacePrefix.trim().length() > 0)) {
            writeAttribute("xsi",
                "http://www.w3.org/2001/XMLSchema-instance", "type",
                namespacePrefix + ":FacValidityRequest", xmlWriter);
        } else {
            writeAttribute("xsi",
                "http://www.w3.org/2001/XMLSchema-instance", "type",
                "FacValidityRequest", xmlWriter);
        }
    }

    if (localFACCodeTracker) {
        namespace = "http://tempuri.org/";
        writeStartElement(null, namespace, "FACCode", xmlWriter);

        if (localFACCode == null) {
            // write the nil attribute
            throw new org.apache.axis2.databinding.ADBException(
                "FACCode cannot be null!!");
        } else {
            xmlWriter.writeCharacters(localFACCode);
        }

        xmlWriter.writeEndElement();
    }

    if (localMobileNumberTracker) {
        namespace = "http://tempuri.org/";
        writeStartElement(null, namespace, "MobileNumber", xmlWriter);

        if (localMobileNumber == null) {
            // write the nil attribute
            throw new org.apache.axis2.databinding.ADBException(
                "MobileNumber cannot be null!!");
        } else {
            xmlWriter.writeCharacters(localMobileNumber);
        }

        xmlWriter.writeEndElement();
    }

    if (localUniqueIdTracker) {
        namespace = "http://tempuri.org/";
        writeStartElement(null, namespace, "UniqueId", xmlWriter);

        if (localUniqueId == null) {
            // write the nil attribute
            throw new org.apache.axis2.databinding.ADBException(
                "UniqueId cannot be null!!");
        } else {
            xmlWriter.writeCharacters(localUniqueId);
        }

        xmlWriter.writeEndElement();
    }

    if (localHashTracker) {
        namespace = "http://tempuri.org/";
        writeStartElement(null, namespace, "Hash", xmlWriter);

        if (localHash == null) {
            // write the nil attribute
            throw new org.apache.axis2.databinding.ADBException(
                "Hash cannot be null!!");
        } else {
            xmlWriter.writeCharacters(localHash);
        }

        xmlWriter.writeEndElement();
    }

    xmlWriter.writeEndElement();
}

private static java.lang.String generatePrefix(java.lang.String namespace) {
    if (namespace.equals("http://tempuri.org/")) {
        return "ns1";
    }

    return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
}

/**
 * Utility method to write an element start tag.
 */
private void writeStartElement(java.lang.String prefix,
    java.lang.String namespace, java.lang.String localPart,
    javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException {
    java.lang.String writerPrefix = xmlWriter.getPrefix(namespace);

    if (writerPrefix != null) {
        xmlWriter.writeStartElement(writerPrefix, localPart, namespace);
    } else {
        if (namespace.length() == 0) {
            prefix = "";
        } else if (prefix == null) {
            prefix = generatePrefix(namespace);
        }

        xmlWriter.writeStartElement(prefix, localPart, namespace);
        xmlWriter.writeNamespace(prefix, namespace);
        xmlWriter.setPrefix(prefix, namespace);
    }
}

/**
 * Util method to write an attribute with the ns prefix
 */
private void writeAttribute(java.lang.String prefix,
    java.lang.String namespace, java.lang.String attName,
    java.lang.String attValue, javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException {
    java.lang.String writerPrefix = xmlWriter.getPrefix(namespace);

    if (writerPrefix != null) {
        xmlWriter.writeAttribute(writerPrefix, namespace, attName, attValue);
    } else {
        xmlWriter.writeNamespace(prefix, namespace);
        xmlWriter.setPrefix(prefix, namespace);
        xmlWriter.writeAttribute(prefix, namespace, attName, attValue);
    }
}

/**
 * Util method to write an attribute without the ns prefix
 */
private void writeAttribute(java.lang.String namespace,
    java.lang.String attName, java.lang.String attValue,
    javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException {
    if (namespace.equals("")) {
        xmlWriter.writeAttribute(attName, attValue);
    } else {
        xmlWriter.writeAttribute(registerPrefix(xmlWriter, namespace),
            namespace, attName, attValue);
    }
}

/**
 * Util method to write an attribute without the ns prefix
 */
private void writeQNameAttribute(java.lang.String namespace,
    java.lang.String attName, javax.xml.namespace.QName qname,
    javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException {
    java.lang.String attributeNamespace = qname.getNamespaceURI();
    java.lang.String attributePrefix = xmlWriter.getPrefix(attributeNamespace);

    if (attributePrefix == null) {
        attributePrefix = registerPrefix(xmlWriter, attributeNamespace);
    }

    java.lang.String attributeValue;

    if (attributePrefix.trim().length() > 0) {
        attributeValue = attributePrefix + ":" + qname.getLocalPart();
    } else {
        attributeValue = qname.getLocalPart();
    }

    if (namespace.equals("")) {
        xmlWriter.writeAttribute(attName, attributeValue);
    } else {
        registerPrefix(xmlWriter, namespace);
        xmlWriter.writeAttribute(attributePrefix, namespace, attName,
            attributeValue);
    }
}

/**
 *  method to handle Qnames
 */
private void writeQName(javax.xml.namespace.QName qname,
    javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException {
    java.lang.String namespaceURI = qname.getNamespaceURI();

    if (namespaceURI != null) {
        java.lang.String prefix = xmlWriter.getPrefix(namespaceURI);

        if (prefix == null) {
            prefix = generatePrefix(namespaceURI);
            xmlWriter.writeNamespace(prefix, namespaceURI);
            xmlWriter.setPrefix(prefix, namespaceURI);
        }

        if (prefix.trim().length() > 0) {
            xmlWriter.writeCharacters(prefix + ":" +
                org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                    qname));
        } else {
            // i.e this is the default namespace
            xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                    qname));
        }
    } else {
        xmlWriter.writeCharacters(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                qname));
    }
}

private void writeQNames(javax.xml.namespace.QName[] qnames,
    javax.xml.stream.XMLStreamWriter xmlWriter)
    throws javax.xml.stream.XMLStreamException {
    if (qnames != null) {
        // we have to store this data until last moment since it is not possible to write any
        // namespace data after writing the charactor data
        StringBuilder stringToWrite = new StringBuilder();
        java.lang.String namespaceURI = null;
        java.lang.String prefix = null;

        for (int i = 0; i < qnames.length; i++) {
            if (i > 0) {
                stringToWrite.append(" ");
            }

            namespaceURI = qnames[i].getNamespaceURI();

            if (namespaceURI != null) {
                prefix = xmlWriter.getPrefix(namespaceURI);

                if ((prefix == null) || (prefix.length() == 0)) {
                    prefix = generatePrefix(namespaceURI);
                    xmlWriter.writeNamespace(prefix, namespaceURI);
                    xmlWriter.setPrefix(prefix, namespaceURI);
                }

                if (prefix.trim().length() > 0) {
                    stringToWrite.append(prefix).append(":")
                                 .append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                            qnames[i]));
                } else {
                    stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                            qnames[i]));
                }
            } else {
                stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                        qnames[i]));
            }
        }

        xmlWriter.writeCharacters(stringToWrite.toString());
    }
}

/**
 * Register a namespace prefix
 */
private java.lang.String registerPrefix(
    javax.xml.stream.XMLStreamWriter xmlWriter, java.lang.String namespace)
    throws javax.xml.stream.XMLStreamException {
    java.lang.String prefix = xmlWriter.getPrefix(namespace);

    if (prefix == null) {
        prefix = generatePrefix(namespace);

        javax.xml.namespace.NamespaceContext nsContext = xmlWriter.getNamespaceContext();

        while (true) {
            java.lang.String uri = nsContext.getNamespaceURI(prefix);

            if ((uri == null) || (uri.length() == 0)) {
                break;
            }

            prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
        }

        xmlWriter.writeNamespace(prefix, namespace);
        xmlWriter.setPrefix(prefix, namespace);
    }

    return prefix;
}

/**
 *  Factory class that keeps the parse method
 */
public static class Factory {
    private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Factory.class);

    /**
     * static method to create the object
     * Precondition:  If this object is an element, the current or next start element starts this object and any intervening reader events are ignorable
     *                If this object is not an element, it is a complex type and the reader is at the event just after the outer start element
     * Postcondition: If this object is an element, the reader is positioned at its end element
     *                If this object is a complex type, the reader is positioned at the end element of its outer element
     * @param reader
     * @return 
     * @throws java.lang.Exception 
     */
    public static FacValidityRequest parse(
        javax.xml.stream.XMLStreamReader reader) throws java.lang.Exception {
        FacValidityRequest object = new FacValidityRequest();

        int event;
        javax.xml.namespace.QName currentQName = null;
        java.lang.String nillableValue = null;
        java.lang.String prefix = "";
        java.lang.String namespaceuri = "";

        try {
            while (!reader.isStartElement() && !reader.isEndElement())
                reader.next();

            currentQName = reader.getName();

            if (reader.getAttributeValue(
                        "http://www.w3.org/2001/XMLSchema-instance", "type") != null) {
                java.lang.String fullTypeName = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance",
                        "type");

                if (fullTypeName != null) {
                    java.lang.String nsPrefix = null;

                    if (fullTypeName.indexOf(":") > -1) {
                        nsPrefix = fullTypeName.substring(0,
                                fullTypeName.indexOf(":"));
                    }

                    nsPrefix = (nsPrefix == null) ? "" : nsPrefix;

                    java.lang.String type = fullTypeName.substring(fullTypeName.indexOf(
                                ":") + 1);

                    if (!"FacValidityRequest".equals(type)) {
                        //find namespace for the prefix
                        java.lang.String nsUri = reader.getNamespaceContext()
                                                       .getNamespaceURI(nsPrefix);

                        return (FacValidityRequest) ExtensionMapper.getTypeObject(nsUri,
                            type, reader);
                    }
                }
            }

            // Note all attributes that were handled. Used to differ normal attributes
            // from anyAttributes.
            java.util.Vector handledAttributes = new java.util.Vector();

            reader.next();

            while (!reader.isStartElement() && !reader.isEndElement())
                reader.next();

            if (reader.isStartElement() &&
                    new javax.xml.namespace.QName("http://tempuri.org/",
                        "FACCode").equals(reader.getName())) {
                nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance",
                        "nil");

                if ("true".equals(nillableValue) ||
                        "1".equals(nillableValue)) {
                    throw new org.apache.axis2.databinding.ADBException(
                        "The element: " + "FACCode" + "  cannot be null");
                }

                java.lang.String content = reader.getElementText();

                object.setFACCode(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                        content));

                reader.next();
            } // End of if for expected property start element

            else {
            }

            while (!reader.isStartElement() && !reader.isEndElement())
                reader.next();

            if (reader.isStartElement() &&
                    new javax.xml.namespace.QName("http://tempuri.org/",
                        "MobileNumber").equals(reader.getName())) {
                nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance",
                        "nil");

                if ("true".equals(nillableValue) ||
                        "1".equals(nillableValue)) {
                    throw new org.apache.axis2.databinding.ADBException(
                        "The element: " + "MobileNumber" +
                        "  cannot be null");
                }

                java.lang.String content = reader.getElementText();

                object.setMobileNumber(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                        content));

                reader.next();
            } // End of if for expected property start element

            else {
            }

            while (!reader.isStartElement() && !reader.isEndElement())
                reader.next();

            if (reader.isStartElement() &&
                    new javax.xml.namespace.QName("http://tempuri.org/",
                        "UniqueId").equals(reader.getName())) {
                nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance",
                        "nil");

                if ("true".equals(nillableValue) ||
                        "1".equals(nillableValue)) {
                    throw new org.apache.axis2.databinding.ADBException(
                        "The element: " + "UniqueId" + "  cannot be null");
                }

                java.lang.String content = reader.getElementText();

                object.setUniqueId(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                        content));

                reader.next();
            } // End of if for expected property start element

            else {
            }

            while (!reader.isStartElement() && !reader.isEndElement())
                reader.next();

            if (reader.isStartElement() &&
                    new javax.xml.namespace.QName("http://tempuri.org/",
                        "Hash").equals(reader.getName())) {
                nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance",
                        "nil");

                if ("true".equals(nillableValue) ||
                        "1".equals(nillableValue)) {
                    throw new org.apache.axis2.databinding.ADBException(
                        "The element: " + "Hash" + "  cannot be null");
                }

                java.lang.String content = reader.getElementText();

                object.setHash(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(
                        content));

                reader.next();
            } // End of if for expected property start element

            else {
            }

            while (!reader.isStartElement() && !reader.isEndElement())
                reader.next();

            if (reader.isStartElement()) {
                // 2 - A start element we are not expecting indicates a trailing invalid property
                throw new org.apache.axis2.databinding.ADBException(
                    "Unexpected subelement " + reader.getName());
            }
        } catch (javax.xml.stream.XMLStreamException e) {
            throw new java.lang.Exception(e);
        }

        return object;
    }
} //end of factory class
}

我尝试使用 POJO 并设置它的值,如下所示,但是当我使用 system.out.println 将 POJO 打印到控制台时,我无法查看我的 POJO 的字符串表示形式,我也无法将我的 POJO 转换为字符串通过互联网发送,而是它给了我以下内容,我猜它是内存中的地址,但我想要字符串表示

com.innovectives.octopus.gt.bank.agency.common.dto.FacValidityRequest@2d9b42e2

FacValidityRequest commonGTRequest = new FacValidityRequest();

commonGTRequest.setFACCode("1095780292");
commonGTRequest.setMobileNumber("08036952110");
commonGTRequest.setUniqueId(OctopusHelper.randomUUIDString()); 
commonGTRequest.setHash("hashing");
JAXBContext context = JAXBContext.newInstance(FacValidityRequest.class);
System.out.println("data = "+ ConvertXmlToString(commonGTRequest, context));

exchange.getIn(FacValidityRequest.class);
exchange.getIn().setBody(commonGTRequest);
LOG.info("end convertFacValidationRequest...\n" + exchange.getIn().getBody(String.class));

样品申请

<soapenv:Envelope 
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:tem="http://tempuri.org/">
<soap:Header/>
<soap:Body>
  <tem:FACValidityRequest>
     <!--Optional:-->
     <tem:facreq>
        <!--Optional:-->
        <tem:FACCode>?</tem:FACCode>
        <!--Optional:-->
        <tem:MobileNumber>?</tem:MobileNumber>
        <!--Optional:-->
        <tem:UniqueId>?</tem:UniqueId>
        <!--Optional:-->
        <tem:Hash>?</tem:Hash>
     </tem:facreq>
  </tem:FACValidityRequest>
  </soap:Body>
 </soap:Envelope>

如何使用上面生成的 POJO 来实现这一点。

【问题讨论】:

    标签: java soapui pojo


    【解决方案1】:

    您得到的是默认 Java Object.toString() 实现的输出,它是正确的 - 您的类不会覆盖 toString()

    所以,要么查看 Axis2/SoapUI 文档,了解是否有办法生成 toString() 方法或(如果没有)

    取决于你想怎么看你的对象字符串表示你可以:

    1. 类生成后覆盖toString()
    2. 创建一些实用程序将您的对象转换为字符串
      • 最简单的方法是使用Apache BeanUtils.describe(Object obj)方法
      • 但如果您想将实际的 XML 视为字符串,则需要使用 Axis2 为您生成的 serialize 方法之一。

    类似:

     // use ByteArrayOutputStream as example
     ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        XMLStreamWriter xmlWriter = XMLStreamWriterFactory.create(outStream);
    
        // fake line !!! check Axis2 documentation what you need to pass as Parent QName to Serialize an object 
        javax.xml.namespace.QName parentQName = new javax.xml.namespace.QName("http://tempuri.org/","FacValidityRequest", "ns1");
    
        // This is a main point to get a XML String out of POJO 
        myFacValidityRequestObject.serialize(parentQName , xmlWriter);
    
        System.out.println(new String(outStream.toByteArray()));
    
        xmlWriter.close();
    

    您只需要找出必须存在的实际 Parent QName 参数(在我的示例中它只是一个假参数)

    【讨论】:

    • 它不起作用。我在问题中添加了示例 FACValidity 请求
    • 您的 POJO 由 Axis2 而非 JAXB 生成
    • 还要澄清你想做什么:exchange.getIn().getBody(String.class)system.out.println(commonGTRequest)... 如果首先:你将 body 设置为 Object,但尝试将它作为 String - 所以你得到了 @987654330 @结果出你的对象...
    • 该项目实际上是一个spring DM,所以我使用exchange来跨bean移动数据。我添加的请求来自用于在 soapUI 中生成 POJO 的原始 WDSL
    • 使用什么框架并不重要。对于现在的代码,您必须在 POJO 中覆盖 toString() 方法,然后您将在日志语句中看到它的结果,或者(如我所说)您可以在实际对象的 LOG.info( 语句中使用一些自定义转换器并且不要尝试从 Body 获取它为String.class
    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2014-11-28
    相关资源
    最近更新 更多