2010-06-22 5 views
0

J'ai essayé d'activer la compression fastinfoset sur mes services Web. Cependant, j'ai un problème pour que le type de contenu change à la demande du client. Au moins, je pense que c'est pour ça que ça ne se comprime pas.Axis2 et fastinfoset - impossible de modifier le type de contenu

J'ai essayé beaucoup de choses différentes, mais le type de contenu reste toujours "text/xml". Je suis sûr que c'est supposé passer par "application/soap + fastinfoset" comme je l'ai fait maintenant. J'utilise Axis2 en mode autonome, mais je pense que le problème est que l'en-tête du type de contenu ne change pas.

Je sais que les options elles-mêmes sont réglées sur la demande parce que j'ai pu changer une autre option de "UTF-8" à "UTF-16", et il est apparu dans l'en-tête. Voici la sortie d'en-tête en cours de TCPMonitor:

POST/axis2/services/AddressBookService HTTP/1.1

Content-Type: text/xml; charset = UTF-16

SOAPAction: "urn: anonRobustOp"

User-Agent: Axis2

Hôte: 127.0.0.1:1237

Transfer-Encoding: chunked

Le Le code client est illustré ci-dessous. Toute aide très appréciée.

package sample.addressbook.rpcclient; 



import javax.xml.namespace.QName;  
import org.apache.axis2.AxisFault; 
import org.apache.axis2.addressing.EndpointReference; 
import org.apache.axis2.client.Options; 
import org.apache.axis2.rpc.client.RPCServiceClient; 
import org.apache.axis2.Constants; 
import sample.addressbook.entry.Entry; 


public class AddressBookRPCClient { 

    public static void main(String[] args1) throws AxisFault { 

     RPCServiceClient serviceClient = new RPCServiceClient(); 

     Options options = serviceClient.getOptions(); 

     options.setProperty(Constants.Configuration.MESSAGE_TYPE, 
       "application/soap+fastinfoset"); 

     options.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, "UTF-16"); 


     EndpointReference targetEPR = new EndpointReference(

       "http://127.0.0.1:1237/axis2/services/AddressBookService"); 

     options.setTo(targetEPR); 


     // ///////////////////////////////////////////////////////////////////// 



    serviceClient.setOptions(options); 


     /* 

     * Creates an Entry and stores it in the AddressBook. 

     */ 



     // QName of the target method 

     QName opAddEntry = new QName("http://service.addressbook.sample", "addEntry"); 



     /* 

     * Constructing a new Entry 

     */ 

     Entry entry = new Entry(); 



     entry.setName("Abby Cadabby"); 

     entry.setStreet("Sesame Street"); 

     entry.setCity("Sesame City"); 

     entry.setState("Sesame State"); 

     entry.setPostalCode("11111111111111111111111111111111111111111111111111111111111111111111111111111"); 



     // Constructing the arguments array for the method invocation 

     Object[] opAddEntryArgs = new Object[] { entry }; 



     // Invoking the method 

     serviceClient.invokeRobust(opAddEntry, opAddEntryArgs); 



     /* 

     * Fetching an Entry from the Address book 

     */ 



     // QName of the method to invoke 

     QName opFindEntry = new QName("http://service.addressbook.sample", "findEntry"); 



     // 

     String name = "Abby Cadabby"; 



     Object[] opFindEntryArgs = new Object[] { name }; 

     Class[] returnTypes = new Class[] { Entry.class }; 


     Object[] response = serviceClient.invokeBlocking(opFindEntry, 

       opFindEntryArgs, returnTypes); 


     Entry result = (Entry) response[0]; 



     if (result == null) { 

      System.out.println("No entry found for " + name); 

      return; 

     } 



     System.out.println("Name :" + result.getName()); 

     System.out.println("Street :" + result.getStreet()); 

     System.out.println("City :" + result.getCity()); 

     System.out.println("State :" + result.getState()); 

     System.out.println("Postal Code :" + result.getPostalCode()); 


    } 

} 

Répondre

-1

Lecture de "How to Enable Fast Infoset in Axis2/Java". J'espère que cela aide.

+0

Je l'ai utilisé ce document comme base de mon code. Ça ne fonctionne pas. J'espérais quelque chose d'un peu plus perspicace. –

2

passe fichier axis2.xml comme argument JVM comme

-Daxis2.xml="location of axis2.xml" 

Ici axis2.xml doit être configuré pour FI (messageFormatters et messageBuilders)

Questions connexes