2010-05-17 5 views
4

J'ai du code qui semble être correct sur la base de ce que je peux trouver, mais la sortie crachée n'indique pas qu'il utilise FastInfoset. Ma compréhension est l'acceptation devrait indiquer qu'il peut accepter Fastinfoset et la réponse l'utiliserait réellement, signifiant que ce n'est pas text/xml comme type de réponse. Une idée de ce que je fais mal? J'ai récuré avec Google et j'ai du mal à trouver beaucoup de détails sur l'utilisation de FastInfoset.Comment utiliser FastInfoset avec JAXWS?

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
    factory.getInInterceptors().add(new LoggingInInterceptor()); 
    factory.getOutInterceptors().add(new LoggingOutInterceptor()); 
    factory.setServiceClass(C360Server.class); 
    factory.setAddress("http://localhost:8501/cxfcontroller/cl_v5"); 
    C360Server client = (C360Server)factory.create(); 
    ((BindingProvider)client).getRequestContext().put(
     "com.sun.xml.ws.client.ContentNegotiation", "optimistic"); 

    C360Request requestTrans = new C360Request(); 
    ... code to fill in the request ... 
    C360Response response = client.findContacts(requestTrans); 

L'exploitation forestière ne semble pas indiquer FastInfoset est même tenté cependant:

INFO: Outbound Message 
--------------------------- 
ID: 1 
Address: http://localhost:8501/cxfcontroller/cl_v5 
Encoding: UTF-8 
Content-Type: text/xml 
Headers: {SOAPAction=[""], Authorization=[Basic cWFfc3VwZXI6cWFfc3VwZXI=], Accept=[*/*]} 
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:findContacts>...bunch of xml deleted for brevity...</ns1:findContacts></soap:Body></soap:Envelope> 
-------------------------------------- 
May 17, 2010 3:23:45 PM org.apache.cxf.interceptor.LoggingInInterceptor logging 
INFO: Inbound Message 
---------------------------- 
ID: 1 
Response-Code: 200 
Encoding: UTF-8 
Content-Type: text/xml; charset=utf-8 
Headers: {content-type=[text/xml; charset=utf-8], Content-Length=[611], Server=[Jetty(6.1.x)]} 
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:findContactsResponse>...bunch of xml spew deleted for brevity...</ns1:findContactsResponse></soap:Body></soap:Envelope> 
-------------------------------------- 

Toutes les idées que je fais mal? Même si le serveur ne supportait pas FastInfoset, je devrais toujours voir la tentative de négociation dans la requête, non?

Répondre

6

La réponse est que les informations que j'avais sur comment l'activer étaient obsolètes. Ce qui suit fonctionne sur la fin du client (et probablement sur la fin du serveur, mais j'ai une configuration Spring activée qui le gère).

  JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
      // This enables FastInfoset as the communication protocol 
      factory.getInInterceptors().add(new FIStaxInInterceptor()); 
      factory.getOutInterceptors().add(new FIStaxOutInterceptor()); 
      ... other code to set username, location, etc. goes here. 
      client = (C360Server) factory.create(); 
0
//Enabling FastInfoset by configuring proxy 
// Enabling FI in pessimistic mode 
Map<String, Object> ctxt = ((BindingProvider)proxy).getRequestContext(); 
ctxt.put(JAXWSProperties.CONTENT_NEGOTIATION_PROPERTY, "pessimistic"); 

OU

Activation FastInfoset en utilisant la propriété du système

-Dcom.sun.xml.ws.client.ContentNegotiation=pessimistic 
Questions connexes