Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义服务异常将作为AxisFault抛出_Java_Web Services_Soap_Axis2_Soap Client - Fatal编程技术网

Java 自定义服务异常将作为AxisFault抛出

Java 自定义服务异常将作为AxisFault抛出,java,web-services,soap,axis2,soap-client,Java,Web Services,Soap,Axis2,Soap Client,我们有一个Axis2客户机从SOAP web服务读取数据;使用WSDL2JAVA生成新的客户端存根类并重命名其包时出现问题。生成工具本身并没有引起问题,但是WSDL2JAVA并没有为所有类重命名包,所以我必须自己做这件事 您知道为这些类重命名包的最佳方法吗,而不会出现问题?比如用智能的方式替换字符串 在某些情况下,web服务抛出业务异常,调用代码直接捕获这些异常,但是这种情况不再发生,客户机现在捕获的不是SPECIALException,而是AxisFault 您可以在下面看到XML响应: &l

我们有一个Axis2客户机从SOAP web服务读取数据;使用WSDL2JAVA生成新的客户端存根类并重命名其包时出现问题。生成工具本身并没有引起问题,但是WSDL2JAVA并没有为所有类重命名包,所以我必须自己做这件事

您知道为这些类重命名包的最佳方法吗,而不会出现问题?比如用智能的方式替换字符串

在某些情况下,web服务抛出业务异常,调用代码直接捕获这些异常,但是这种情况不再发生,客户机现在捕获的不是SPECIALException,而是AxisFault

您可以在下面看到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>

soapenv:服务器
异常消息,由于业务错误。
7.
异常消息,由于业务错误。

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

这是通过在所有生成的存根类中执行字符串替换来解决的,在不更改整个软件包名称的情况下,假设您在第二代中使用了“-p com.my.company.network.stubs”,那么对于“com.bla.blo.bli”下的其余软件包,不要重命名为“com.my.company.network.stubs.bli”,如果它来自服务器,则将其重命名为“com.my.company.network.stubs.bla.blo.bli”

。您可以与服务器端团队一起检查请求处理中的错误。别忘了与他们共享请求和响应XML文件。事实证明,这不是来自服务器:如果我使用WSDL2JAVA生成新代码,事情就会解决。但是我需要重命名包,使用-p'packageName'只重命名部分类,并且为更多类重命名包会导致异常再次变成AxisFault;在这些文件中,您还可以找到包定义;您是否检查过代码生成后是否有一些文件?你检查过文件内容了吗?无论如何,我认为生成类的最简单方法是使用Axis提供的Ant任务