【问题标题】:XML encoding is not returning HTML entities in SOAPXML 编码不返回 SOAP 中的 HTML 实体
【发布时间】:2021-07-28 16:14:09
【问题描述】:

我有以下测试方法。

public String ping(String xml) {
    return "<PingResult>Service is Live</PingResult>";
}

当我调用它时,我得到的结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <PingResponse xmlns="http://www.url.com/service">
        &lt;PingResult&gt;Service is Live&lt;/PingResult&gt;
      </PingResponse>
   </soapenv:Body>
</soapenv:Envelope>

&amp;lt; 替换&lt; 没有帮助。知道如何实际返回那些 &lt;&gt; 符号吗?看起来无论我用什么替换它们都不起作用。

编辑

PingResponse.java

package user;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "PingResponse")
public class PingResponse implements java.io.Serializable {

    private String pingResult;

    @XmlElement(name = "PingResult")
    public String getPingResult() {
        return pingResult;
    }

    public void setPingResult(String pingResult) {
        this.pingResult = pingResult;
    }

    // Type metadata
    private static org.apache.axis.description.TypeDesc typeDesc =
        new org.apache.axis.description.TypeDesc(PingResponse.class, true);

    static {
        typeDesc.setXmlType(new javax.xml.namespace.QName("user", "PingResponse"));
        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("PingResult");
        elemField.setXmlName(new javax.xml.namespace.QName("", "PingResult"));
        elemField.setXmlType(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"));
        elemField.setNillable(true);
        typeDesc.addFieldDesc(elemField);
    }

    /**
     * Return type metadata object
     */
    public static org.apache.axis.description.TypeDesc getTypeDesc() {
        return typeDesc;
    }

    /**
     * Get Custom Serializer
     */
    public static org.apache.axis.encoding.Serializer getSerializer(
        java.lang.String mechType,
        java.lang.Class _javaType,
        javax.xml.namespace.QName _xmlType) {
        return
        new org.apache.axis.encoding.ser.BeanSerializer(
            _javaType, _xmlType, typeDesc);
    }

    /**
     * Get Custom Deserializer
     */
    public static org.apache.axis.encoding.Deserializer getDeserializer(
        java.lang.String mechType,
        java.lang.Class _javaType,
        javax.xml.namespace.QName _xmlType) {
        return
        new org.apache.axis.encoding.ser.BeanDeserializer(
            _javaType, _xmlType, typeDesc);
    }
}

ServicesSoapImpl.java

package user;

import user.PingResponse;

public class ServicesSoapImpl implements user.serviceSoap {


    public PingResponse ping(String xml) throws java.rmi.RemoteException {

        PingResponse response = new PingResponse();
        response.setPingResult("Service is Live");
        return response;

    }

}

而且我确实有更新,在添加以上所有内容后,我可以获得不同的东西。这不是我所需要的,但已经接近了。

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <PingResponse xmlns="user" xmlns:ns1="user" xsi:type="ns1:PingResponse">
         <pingResult>Service is Live</pingResult>
      </PingResponse>
   </soapenv:Body>
</soapenv:Envelope>

所以这里有一些以前没有的额外内容,pingResult 出于某种原因是小写的。

【问题讨论】:

  • 如果 PingResponse 下只有一个元素,只返回字符串 "Service is Live" 应该没问题
  • @sanjeevRm 不幸的是,我要发送它的人要求将消息专门放在该元素内。

标签: java html xml soap utf-8


【解决方案1】:

响应中使用的架构类应如下所示:

@XmlRootElement(name = "PingResponse")
public class PingResponse {

private String pingResult;

@XmlElement(name = "PingResult")
public String getPingResult() {
    return pingResult;
}

public void setPingResult(String pingResult) {
    this.pingResult = pingResult;
}

}

【讨论】:

  • 这很奇怪,我在尝试使用它们时不断出错。我添加了import javax.xml.bind.*;,但我得到了error: cannot find symbol 这部分@XmlElement(name = "PingResult")
  • 我进行了更改,但响应不包括新的@XmlElement。现在它只返回Service is Live (string pingResult)
  • 你能显示一些代码吗?如果使用 java > 1.8,则需要包含对 javax.xml 的显式依赖
  • 我用详细信息对问题进行了编辑。
  • 奇怪的是你得到小写的pingResult。抱歉,我不太了解axis,无法进一步帮助您。
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 2016-11-05
  • 2013-09-15
  • 2013-03-20
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多