prolog异常中不允许的内容

时间:2009-03-16 03:55:03

标签: c# java soap cxf

我正在尝试将xml发送到第三方通过c#.NET应用程序提供给我的基于java的Web服务,我收到org.xml.sax.SAXParseException: Content is not allowed in prolog错误。

我已经针对模式验证了xml,并且我传递了用于将xml保存到.xml文件的内存流,然后使用十六进制编辑器打开文件以确保prolog中没有不需要的字符,没有。打开时,文件中的第一个字符是

<?xml version="1.0" encoding="utf-8"?>

我用来将xml数据发送到Web服务的类接受一个字节数组。我认为使用 XmlTextWriter 创建xml到utf-8编码的内存流,然后将流的内容发送到字节数组是最直接的方法。

我已经做了很多研究并尝试了我能找到的所有可能的问题,但没有任何效果。有人可以帮忙吗?提前谢谢。

顺便说一下,这是Web服务返回给我的部分内容。在SOAP消息的有效负载中, 元素之后的数据应该是这样的,还是像之前的内容一样可读xml?

Messages:
Message:

Payload: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http:/
/schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema
-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><postSubmissi
on xmlns="http://service.arm.hud.gov/"><submissionHeader><agcHcsId>1</agcHcsId><
agcName>test</agcName><systemName>123</systemName><cmsSubId>123456</cmsSubId><su
bFlag>0</subFlag></submissionHeader><agcType>test</agcType><submissionData>PD94b
WwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dG5zOlN1Ym1pc3Npb25EYXRhIHhzaTpzY
2hlbWFMb2NhdGlvbj0iaHR0cDovL2dvdi5odWQuYXJtL2FybV9kYXRhYmFnXzNfMS54c2QiIHhtbG5zO
nhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT......etc............................
</submissionData></postSubmission></soap:Body></soap:Envelope>

这里是xml数据以提高可读性:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http:/
    /schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema
    -instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <postSubmissi on xmlns="http://service.arm.hud.gov/">
            <submissionHeader>
                <agcHcsId>1</agcHcsId>
                <agcName>test</agcName>
                <systemName>123</systemName>
                <cmsSubId>123456</cmsSubId>
                <subFlag>0</subFlag>
            </submissionHeader>
            <agcType>test</agcType>
            <submissionData>PD94b
                WwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dG5zOlN1Ym1pc3Npb25EYXRhIHhzaTpzY
                2hlbWFMb2NhdGlvbj0iaHR0cDovL2dvdi5odWQuYXJtL2FybV9kYXRhYmFnXzNfMS54c2QiIHhtbG5zO
                nhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT......etc............................
            </submissionData>
        </postSubmission>
    </soap:Body>
</soap:Envelope>

6 个答案:

答案 0 :(得分:4)

我能够通过删除UTF编码来解决问题。听起来像在我们的两种情况下,文本实际上不是UTF-8编码。

答案 1 :(得分:3)

您的文件顶部是否有Byte Order Mark导致此混淆?使用十六进制转储或十六进制编辑器转储或编辑文件,并检查前两个或三个字节,并确保文件以

答案 2 :(得分:0)

我刚收到你的消息,缩进它并验证:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <postSubmission xmlns="http://service.arm.hud.gov/">
            <submissionHeader>
                <agcHcsId>1</agcHcsId>
                <agcName>test</agcName>
                <systemName>123</systemName>
                <cmsSubId>123456</cmsSubId>
                <subFlag>0</subFlag>
            </submissionHeader>
            <agcType>test</agcType>
            <submissionData>
            PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmL *abbreviated data to fit*
            </submissionData>
        </postSubmission>
    </soap:Body>
</soap:Envelope>

我猜这个消息的提前之类的东西在某种程度上是不同步的 - 错误消息似乎表明XML解析器认为它在看到{{1}之前看到了评论行。

答案 3 :(得分:0)

只需使用hexplorer等十六进制编辑器打开您的XML文件,然后就可以查看和删除这些奇怪的字符,保存文件并使用首选编辑器打开(我个人使用Notepad++)并确保您的文件使用UTF-8编码: - )

希望这会对你有所帮助

答案 4 :(得分:0)

我对C#/ Java XML互操作性和Java处理字节顺序标记(XML声明之前的2或3个字节以及识别编码字节顺序)没有任何问题。 Java无法很好地使用有效的BOM,因此您必须将其删除。通过派生字节数组并使用:

来检查它
arr[0] == (byte) 0xEF && arr[1] == (byte) 0xBB && arr[2] == (byte) 0xBF

这会检查3字节变体,这是造成悲伤的原因: - (

答案 5 :(得分:0)

Web服务是否与其他(Java)客户端一起正常运行? 我收到这个错误很多次了,错误的来源是库依赖的问题 - 如果我没记错的话,JAXB2与Java5有关。