相关疑难解决方法(0)

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

发生错误时使用JAX-WS跟踪XML请求/响应

如果有任何错误,我想记录原始肥皂邮件请求,我正在使用JAX-WS.任何帮助将不胜感激.

只有在响应中发生异常时,是否有一种简单的方法(也就是说:不使用代理)来访问使用JAX-WS参考实现(JDK 1.5中包含的那个)更好的Web服务的原始请求/响应XML?我想记录原始的SOAP reuest,以便我可以在以后的任何webservice客户端测试它

java jax-ws

24
推荐指数
4
解决办法
5万
查看次数

在客户端使用JAX-WS跟踪SOAP请求/响应

我正在使用JAX-WS参考实现(2.1.7),我想在客户端跟踪SOAP请求/响应.实际上,我需要的是在收到响应时检查一些Http头.

按照以前的问题(使用JAX-WSJava JAX-WS Web服务客户端跟踪XML请求/响应:如何记录日志请求和响应xml?),我创建了自己的处理程序,以便在发送请求和接收请求时进行记录响应:

public class SHandler implements SOAPHandler<SOAPMessageContext>
{

  private static final Logger log = Logger.getLogger(SHandler.class);

  @Nullable
  @Override
  public Set<QName> getHeaders()
  {    
    log.debug(">>>>>>>>>>> GetHeaders");
    return null;    
  }

  @Override
  public boolean handleMessage(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleMessage");
    return true;
  }

  @Override
  public boolean handleFault(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleFault");
    return true;
  }

  @Override
  public void close(MessageContext messageContext)
  {
    log.debug(">>>>>>>>>>> Close");    
  }
}
Run Code Online (Sandbox Code Playgroud)

我在服务初始化期间将处理程序添加到处理程序链:

@WebServiceClient(name = "MyService", targetNamespace = "http://www.whatever.com/", wsdlLocation = "file:/path/to/wsdl")
public class …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws

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

Java JAX-WS Web服务客户端:如何记录日志请求和响应xml?

我创建了该实现的LoggingHandler实现SOAPHandler<SOAPMessageContext>

它应该在每次handleMessage触发时记录(在我的情况下从不调用它)

MyService service = new MyService();
MyServicePort port = service.getPortType();
Run Code Online (Sandbox Code Playgroud)

现在我试试这个:

BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getBinding().getHandlerChain().add(new LoggingHandler());
Run Code Online (Sandbox Code Playgroud)

我没有看到任何请求/响应xml.

你能建议任何解决方案吗?也许有另一种方式来查看输出和请求XML?

java web-services jax-ws

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

如何在java中添加soap标头

我有来自oracle的NO-.net webservice要访问我需要添加soap标头.如何在java中添加soap标头?

Authenticator.setDefault(new ProxyAuthenticator("username", "password"));
                System.getProperties().put("proxySet", "true");
                System.setProperty("http.proxyHost", "IP");
                System.setProperty("http.proxyPort", "port");




                proxy = new RegPresMed_Service(new URL("webservice")).getRegPresMed();
                ((BindingProvider) proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "realwebservice");
                ((BindingProvider) proxy).getRequestContext().put("com.sun.xml.ws.request.timeout", new Integer(60000));
                ((BindingProvider) proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "webserviceUsername");
                ((BindingProvider) proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "webservicePassword");
Run Code Online (Sandbox Code Playgroud)

这有必要吗?

 ((BindingProvider) proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "webserviceUsername");
                    ((BindingProvider) proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "webservicePassword");
Run Code Online (Sandbox Code Playgroud)

我的肥皂标题是这样的:

<wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <wsse:UsernameToken wsu:Id="UsernameToken-6"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>username</wsse:Username>
        <wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
        <wsse:Nonce
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">randomnaumber==</wsse:Nonce>
        <wsu:Created>dateCreated</wsu:Created>
    </wsse:UsernameToken>
</wsse:Security>
Run Code Online (Sandbox Code Playgroud)

java ws-security web-services jax-ws soapheader

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

如何记录Metro堆栈发送的SOAP消息

我正在尝试将使用Metro堆栈发送的消息记录到控制台中.找不到任何办法.

logging client web-services java-metro-framework

5
推荐指数
1
解决办法
2701
查看次数

如何在服务器或客户端以编程方式记录 SOAP 消息和 HTTP 标头?

一直在寻找和测试。

我只想记录 SOAP 消息详细信息和传输协议请求/响应(标头)。

到目前为止发现了什么

- 处理程序.. 将soap 消息作为原始xml 输出到控制台输出这是非常好的解决方案。但是,对于HTTP标头(使用MimeHeaders),输出似乎太少了。例如在客户端我只得到

Accept : text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Type : text/xml; charset=utf-8
Content-Length : 260
Run Code Online (Sandbox Code Playgroud)

- 系统属性

System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.sun.xml.ws.util.pipe.StandaloneTubeAssembler.dump", "true");
System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true");
System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");
Run Code Online (Sandbox Code Playgroud)

这是完美的输出到控制台、完整的 http 标头和肥皂消息。但不能自定义用于日志记录、操作标题/消息。这是一个示例

---[HTTP request - http://localhost:8080/Testmart/TestMartCatalogService]---
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:getProducts xmlns:ns2="http://www.testmart.com"><arg0>books</arg0></ns2:getProducts></S:Body></S:Envelope>--------------------

---[HTTP response - http://localhost:8080/Testmart/TestMartCatalogService - …
Run Code Online (Sandbox Code Playgroud)

soap web-services http-headers jakarta-ee

5
推荐指数
1
解决办法
2500
查看次数

dumpTreshold无效

我使用JAX-WS RI进行SOAP XML与其他服务的交换.我试图看到我的soap xml发送的完整错误日志,但由于截断消息而无法执行此操作:

    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
    at org.apache.cxf.transpo

Message has been truncated

use com.sun.xml.ws.transport.http.HttpAdapter.dumpTreshold property to increase the amount of printed part of the message
--------------------
Run Code Online (Sandbox Code Playgroud)

我无法使用以下设置更正此问题:

System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
        System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
        System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true");
        System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");
        System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dumpTreshold", "999999");
Run Code Online (Sandbox Code Playgroud)

我的意思是dumpTreshold = 999999

任何帮助将不胜感激.

java xml soap jax-ws

3
推荐指数
1
解决办法
3853
查看次数