Axis2 и fastinfoset - невозможно изменить тип содержимого
Я пытался включить сжатие fastinfoset на моих веб-сервисах. Однако у меня возникла проблема с изменением типа содержимого по запросу клиента. По крайней мере, я думаю, именно поэтому он не сжимается.
Я пробовал много разных вещей, но тип контента всегда остается "text/xml". Я вполне уверен, что он должен пройти как "application/soap+fastinfoset", как я его сейчас настроил. Я использую Axis2 как отдельную программу, но опять же я думаю, что проблема в том, что заголовок типа контента не меняется.
Я знаю, что сами параметры устанавливаются по запросу, потому что я смог изменить другой параметр с "UTF-8" на "UTF-16", и он появился в заголовке. Вот текущий вывод заголовка из TCPMonitor:
POST / axis2 / services / AddressBookService HTTP / 1.1
Content-Type: text / xml; кодировка = UTF-16
SOAPAction: "urn: anonRobustOp"
Пользователь-агент: Axis2
Хост: 127.0.0.1:1237
Передача-кодировка: чанки
Код клиента показан ниже. Любая помощь высоко ценится.
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());
}
}
2 ответа
Передать файл axis2.xml в качестве аргумента JVM как
-Daxis2.xml="location of axis2.xml"
Здесь axis2.xml должен быть настроен на FI (messageFormatters и messageBuilders)
Прочтите " Как включить быстрый инфо-набор в Axis2 / Java". Надеюсь, поможет.