2016-03-28 4 views
0

создать пользовательский прокси-сервис в WSO2 ESB 490:Невозможно создать новый актив с WSO2 ESB

<?xml version="1.0" encoding="UTF-8"?> 
 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
 
     name="write_2_greg" 
 
     transports="https,http" 
 
     statistics="disable" 
 
     trace="enable" 
 
     startOnLoad="true"> 
 
    <target> 
 
     <inSequence> 
 
     <payloadFactory media-type="json"> 
 
      <format> 
 
\t \t {"name":"2rest_test","context":"/ressttest2","type":"restservice","version":"1.0.0"} 
 
\t </format> 
 
      <args/> 
 
     </payloadFactory> 
 
     <property name="DISABLE_CHUNKING" 
 
        value="true" 
 
        scope="axis2" 
 
        type="STRING"/> 
 
     <property name="Accept" 
 
        expression="$trp:Accept" 
 
        scope="default" 
 
        type="STRING"/> 
 
     <property name="messageType" 
 
        value="application/json" 
 
        scope="axis2" 
 
        type="STRING"/> 
 
     <property name="Authorization" 
 
        expression="fn:concat('Basic ',base64Encode('admin:admin'))" 
 
        scope="transport" 
 
        type="STRING"/> 
 
     <call> 
 
      <endpoint> 
 
       <http trace="enable" 
 
        method="POST" 
 
        uri-template="https://localhost:9443/governance/restservices"/> 
 
      </endpoint> 
 
     </call> 
 
     <property xmlns:ns="http://org.apache.synapse/xsd" 
 
        name="__Status" 
 
        expression="$axis2:HTTP_SC" 
 
        scope="default" 
 
        type="STRING"/> 
 
     <enrich> 
 
      <source type="body" clone="true"/> 
 
      <target type="property" property="res_body"/> 
 
     </enrich> 
 
     <log level="custom"> 
 
      <property name="__Status" expression="$ctx:__Status"/> 
 
      <property name="res_body--" expression="get-property('res_body')"/> 
 
     </log> 
 
     </inSequence> 
 
     <outSequence/> 
 
     <faultSequence/> 
 
    </target> 
 
    <description/> 
 
</proxy>

Этот простой прокси просто создать новый restservice Грега, он использует GREG REST API , Но когда я запускаю этот прокси-сервис, код состояния GREG ответа 500, и проверить журнал Greg, кажется, Джексон ошибка:

Caused by: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of org.wso2.carbon.governance.api.generic.dataobjects.GenericArtifact, problem: abstract types can only be instantiated with additional type information 
 
at [Source: [email protected]; line: 1, column: 1] 
 
\t at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) 
 
\t at org.codehaus.jackson.map.deser.StdDeserializationContext.instantiationException(StdDeserializationContext.java:212) 
 
\t at org.codehaus.jackson.map.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:97) 
 
\t at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2376) 
 
\t at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1166) 
 
\t at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:410) 
 
\t at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1262) 
 
\t at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1209) 
 
\t at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:757) 
 
\t at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:716) 
 
\t at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:253) 
 
\t ... 40 more

Но я могу создать новый restservice используемый «Клиент Advanced Rest Приложение "(плагин Chrome) enter image description here

BTW, я проверю это на ESB 490, GREG 510 и GREG 520. Как я могу достичь этого, используемого ESB?

+0

Почему вопрос должен быть нижним? – yeahliu

ответ

0

После исследования источника углерода governace кода, я обнаружил, что метод «isReadable» в классе «org.wso2.carbon.governance.rest.api.internal.GenericArtifactMessageBodyReader»

@Override 
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { 
    if (GenericArtifact.class.getName().equals(type.getName()) || GovernanceArtifact.class.getName(). 
      equals(type.getName())) { 
     if (MediaType.APPLICATION_JSON_TYPE.equals(mediaType) || MediaType.APPLICATION_XML_TYPE.equals(mediaType)) { 
      return true; 
     } 
    } 
    return false; 
} 

Когда столб json для запроса, этот метод вызывается для определения MediaType. MediaType принимают

application/json 

Но прокси-сервер Я написал его послал тип содержимого

application/json; charset=UTF-8 

Они не то же самое, так что метод возвращать ложь, а не обрабатывать JSon пост.

Я пытаюсь сбросить ESB прокси-тип содержимого, как это:

<property name="messageType" value="application/json" scope="axis2" type="STRING"/> 
<property name="ContentType" scope="default" type="STRING" value="application/json"/> 

Но тип содержимого еще «приложения/JSON, кодировка = UTF-8»

Я думаю, что это Резон , но как мы можем это исправить?

+0

Я меняю метод «isReadable» возвращает true независимо от того, какой он получил, скопирует код и генерирует management.war, заменяет исходную войну и может теперь создать актив. – yeahliu

Смежные вопросы