标签: soapfault

SOAP错误或结果对象?

我和同事正在讨论这个问题,我们无法达成协议,所以我想得到你的想法.我对此有自己的看法,但我不会为你破坏它.

我应该何时返回SOAP错误,何时应返回具有错误信息的结果对象?假设这是一个可以被各种系统(.NET,Java,等等)使用的通用Web服务.结果对象将具有isError标志,errorType(类似于特定的异常类型)和消息.

有些要考虑的要点:

  1. 数据验证错误是错误吗?
  2. 是否存在故障组合(对于非常特殊情况)和结果对象(对于"预期"错误)?
  3. 您将如何分组SOAP错误(关键[空引用]与验证[邮政编码不正确])?
  4. 快速失败与必须记住检查错误
  5. 最佳实践,模式,标准等

文章链接有效.即使听起来我想要你的意见,请坚持事实(因为y和z,x更好)

web-services exception-handling soapfault

61
推荐指数
3
解决办法
5万
查看次数

如何在JAX-WS Web服务上引发自定义错误?

如何在JAX-WS Web服务上抛出自定义soap错误?我怎么可以指定faultCode,faultStringdetailSOAP错误的?是否可以设置detailas bean 的值而不是String

请注意,我正在使用代码优先方法开发.

java web-services exception jax-ws soapfault

32
推荐指数
2
解决办法
6万
查看次数

处理自定义故障异常时如何获取SOAP fault的faultcode

我们的系统使用基于服务的WSDL生成的JAX-WS客户端存根来使用SOAP Web服务.如果出现错误,服务器返回SOAP错误,如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
  <s:Body>
    <s:Fault>
      <faultcode>SomeErrorCode</faultcode>
      <faultstring xml:lang="en-US">Some error message</faultstring>
      <detail>
        <ApiFault xmlns="http://somenamespace.com/v1.0" xmlns:a="http://somenamespace.com/v1.0" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
          <a:RequestId>123456789</a:RequestId>
          <a:CanRetry>true</a:CanRetry>
        </ApiFault>
      </detail>
    </s:Fault>
  </s:Body>
Run Code Online (Sandbox Code Playgroud)

基于WSDL SomeCustomFault生成异常类,并声明所有服务方法抛出此异常(见下文)异常.

@WebFault(name = "ApiFault", targetNamespace = "http://services.altasoft.ge/orders/v1.0")
public class SomeCustomFault
    extends Exception
{
    private ApiFault faultInfo;

    public SomeCustomFault(String message, ApiFault faultInfo) {
        super(message);
        this.faultInfo = faultInfo;
    }

    public SomeCustomFault(String message, ApiFault faultInfo, Throwable cause) {
        super(message, cause);
        this.faultInfo = faultInfo;
    }

    public ApiFault getFaultInfo() {
        return faultInfo;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此自定义错误异常扩展Exception而非SOAPFaultException.Hovewer我需要获取SOAP …

java soap jax-ws jbossws soapfault

9
推荐指数
1
解决办法
2万
查看次数

WCF FaultException不发送StackTrace

我有一些预定义FaultContract属性的WCF服务.当FaultException<TDetail>抛出异常,他们会派堆栈跟踪,源代码和其他可能取消保存信息.

是否有可能仅返回:

  • 细节(来自通用TDetail)
  • FaultMessage
  • 的faultcode
  • (可能)FaultReason

wcf stack-trace soapfault faultexception

8
推荐指数
1
解决办法
3658
查看次数

如何在SOAPFault中设置faultCode?

为什么我可以设置faulString,但是我不能在SOAPFault中设置自定义错误代码?当我抛出异常时,文本"Code X"没有出现在SoapFaultException中.有人可以告诉我为什么?谢谢.

SOAPFault soapFault = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createFault();
soapFault.setFaultString("String Y")
soapFault.setFaultCode("Code X");

throw new SOAPFaultException(soapFault);
Run Code Online (Sandbox Code Playgroud)

java soap soapfault

8
推荐指数
2
解决办法
1万
查看次数

为什么在某些情况下WCF SoapFault响应会被加密?

我正在创建一个WCF Web服务,其请求/响应应该只签名.为此,在我设置的ServiceContract属性上

ProtectionLevel = ProtectionLevel.Sign
Run Code Online (Sandbox Code Playgroud)

这没问题.

由于要求,一些SoapFaults应该从服务中抛出; 两种类型的SoapFaults:

  • 与申请有关
  • 与WS-Addressing相关(例如缺少MessageID)

为此,我使用处理SoafFaults的常规方法:创建一个IErrorHandler,其中使用MessageFault.CreateFault创建Message实例.

几乎所有返回的SoapFaults都没有加密(这对我来说没问题),我的问题是为什么那些行动="http://www.w3.org/2005/08/addressing/fault"或" http:// www.w3.org/2005/08/addressing/soap/fault "是加密的吗?

wcf web-services soapfault

8
推荐指数
1
解决办法
533
查看次数

SoapFault - faultcode:'ns1:unexpected-error'android SOAP call

我试图使用一个WSDL文件调用SOAP Web服务.

我在其中添加了所有必需的参数.但我收到的错误如下:

SoapFault - faultcode: 'ns1:unexpected-error' faultstring: 'Fault occurred while processing.' faultactor: 'null' detail: null in android
Run Code Online (Sandbox Code Playgroud)

这是我的代码示例:

class RegisterMember extends AsyncTask<Void, Void, Void> {
    String SOAP_ACTION =  "";
    String METHOD_NAME = "registerMember";
    String NAMESPACE = "http://XXXXX.XX"; 
    String URL="http://XXXX.XX?WSDL";

    SoapPrimitive result1;
    String str;
    @Override
    protected void onPreExecute() {
        mProgressDialog = new ProgressDialog(MainActivity.this);
        mProgressDialog.setMessage("Checking For Activation");
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            StringBuffer sb;
            SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("name", "XXXX");
            request.addProperty("email", "XXXX@gmail.com");
            request.addProperty("username", "XXXXX");
            request.addProperty("password", "XXXX"); …
Run Code Online (Sandbox Code Playgroud)

android soap soapfault

8
推荐指数
1
解决办法
1113
查看次数

如何从ASMX Web服务返回错误?

我的Web服务方法返回一个集合对象,这将很好地序列化,这要归功于C#web服务的工作方式!

但是,如果我的代码抛出未捕获的异常,我想返回一个自定义错误对象.

这可能是使用C#ASP.NET v2吗?

例如,

正常操作应返回:

<Books>
    <book>Sample</book>
    <book>Sample</book>
</Books>
Run Code Online (Sandbox Code Playgroud)

但是我想要的错误

  <error>
      <errorMessage></errorMessage>
  </error>
Run Code Online (Sandbox Code Playgroud)

c# web-services asmx soapfault

6
推荐指数
1
解决办法
1万
查看次数

使用CXF捕获webservice异常:NoClassDefFoundError:SOAPFaultBuilder

我一直在使用Apache CXF wsdl2java生成的代码从web服务调用方法已经有一段时间了,到目前为止一直工作正常..我遇到的问题是当webservice(在我的大厅下面实现)合法地抛出一个soap异常,CXF出现以下错误信息:

无法初始化类com.sun.xml.internal.ws.fault.SOAPFaultBuilder

我使用的是Ubuntu 9.04,OpenJDK(IcedTea6 1.4.1)6b14-1.1.1-0ubuntu11,Maven2和CXF 2.2.3.我目前对如何解决这个问题感到茫然,因为我使用的代码和设置似乎很简单..任何人都能指出我在正确的方向吗?如果我可以发布任何进一步的细节,请告诉我..

这是返回的完整堆栈跟踪:

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
    at $Proxy36.downloadPDB(Unknown Source)
    at path.to.my.code.downloadInvalidFileID(SingleMethodTest.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
Run Code Online (Sandbox Code Playgroud)

java cxf soapfault

6
推荐指数
2
解决办法
2万
查看次数

如何从Axis Web服务返回(自定义)SOAPFault?

我有一些WSDL,我需要从中生成一个Web服务实现.我正在使用Eclipse和Axis1.4,并在Weblogic9.2上运行.

生成服务器存根很好,我已经实现了我需要的代码.但是,为了兼容我们正在模拟的exising实现,我需要为某些指定的错误条件返回SOAP错误.

也就是说,我需要响应的SOAP主体看起来像这个例子:

<soapenv:Body>
    <soapenv:Fault>
        <faultcode xmlns:ns1="foobar">ns1:1234</faultcode>
        <faultstring>The supplied parameter name ABCD is not recognised.</faultstring>
        <detail>
            <FaultDetail>An error processing the web service [MyService]: Unknown parameter:ABCD</FaultDetail>
            <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">planet</ns2:hostname>
        </detail>
    </soapenv:Fault>
</soapenv:Body>
Run Code Online (Sandbox Code Playgroud)

从(很多)谷歌搜索,我想我应该能够通过抛出SOAPFaultException来做到这一点.但是消息存根只抛出java.rmi.RemoteException,所以我尝试将SOAPFaultException传递给RemoteException.这给了我这样的东西:

   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Server.userException</faultcode>
         <faultstring>java.rmi.RemoteException: My remote exception; nested exception is: 
    javax.xml.rpc.soap.SOAPFaultException: soap fault string</faultstring>
         <detail>
            <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">myhostname</ns1:hostname>
         </detail>
      </soapenv:Fault>
   </soapenv:Body>
Run Code Online (Sandbox Code Playgroud)

...换句话说,它没有导致SOAP错误.

我已经尝试了很多其他的东西,而且我几乎被卡住了.那么有人能告诉我(理想情况下是一个例子)如何在我的环境中返回带有我可以指定的内容的SOAP故障响应吗?

我并不喜欢使用Axis(但我对此有更多的经验).如果你建议一个替代方案,请注意我需要在Web服务方法中调用另一个(经过身份验证的)Web服务,而我只能在Axis1.4中使用它...

java axis weblogic soapfault weblogic9.x

6
推荐指数
1
解决办法
6840
查看次数