定制的服务异常被抛出为AxisFault。

7
我们有一个使用Axis2客户端从SOAP web服务读取的问题。当使用WSDL2JAVA生成新的客户端存根类并重命名它们的包时,出现了问题。生成工具本身并没有引起问题,但是WSDL2JAVA没有为所有类重命名包,所以我不得不自己做这个工作。
有没有什么好的方法可以重命名这些类的包,而不会出现问题?比如以一种聪明的方式进行字符串替换?
Web服务在某些情况下会抛出业务异常,并直接被调用代码捕获,但现在不再发生这种情况,客户端现在捕获AxisFault而不是SPECIALException。
您可以在下面看到XML响应:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <soapenv:Fault>
            <faultcode>soapenv:Server</faultcode>
            <faultstring>Exception message, due to business error.</faultstring>
            <detail>
                <ns2:SPECIALException
                    xmlns:ns2="http://com.bla.com/common/exception/xsd/2008/08">
                    <ns2:code>7</ns2:code>
                    <ns2:message>Exception message, due to business error.</ns2:message>
                </ns2:SPECIALException>
            </detail>
        </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>

更详细地检查,差异可能是由于生成的BlaServiceStub类中的populateFaults方法,其中类名被设置为字符串以供通过反射后续使用。


如果这是来自服务器的内容,请返回已翻译的文本。您可以与服务器端团队联系,以检查请求处理中出现了什么问题。不要忘记与他们分享请求和响应的XML文件。 - Salman
这并不是来自服务器的问题,事实证明:如果我使用WSDL2JAVA生成新代码,一切都能解决。 但我需要重命名包,使用-p 'packageName'只会重命名部分类,而为更多类重命名包会导致异常再次变成AxisFault。 - abdelrahman-sinno
我不是很了解Axis2,但在Axis1中,当您从wsdl生成类时,它还会生成wsdd文件;在这些文件中,您可以找到包定义;您是否检查过代码生成后是否有一些文件?您是否检查过文件内容?无论如何,我认为生成类的最简单方法是使用Axis提供的Ant任务。 - Angelo Immediata
1个回答

1
通过在所有生成的存根类中进行字符串替换来解决了这个问题,同时不更改整个包名。例如,如果您在生成过程中使用了“-p com.my.company.network.stubs”,那么对于“com.bla.blo.bli”下的其他包,不要将其重命名为“com.my.company.network.stubs.bli”,而是应该重命名为“com.my.company.network.stubs.bla.blo.bli”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接