Arquivo Histórico de Thiago Vespa
Este site foi preservado para fins históricos e de referência. Alguns conteúdos podem estar desatualizados e recursos interativos foram desativados. Visite o site atual.
JDeveloper – Thiago Galbiatti Vespa https://thiagovespa.com.br/blog Precisando é só avisar! Mon, 27 Oct 2025 01:38:03 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.8.5 https://thiagovespa.com.br/blog/wp-content/uploads/2023/05/cropped-eu3-32x32.png JDeveloper – Thiago Galbiatti Vespa https://thiagovespa.com.br/blog 32 32 Preferências no SOA Suite https://thiagovespa.com.br/blog/2013/02/06/preferencias-no-soa-suite/ https://thiagovespa.com.br/blog/2013/02/06/preferencias-no-soa-suite/#respond Wed, 06 Feb 2013 16:29:43 +0000 http://www.thiagovespa.com.br/blog/?p=3884 Continue lendo Preferências no SOA Suite→]]> Em algumas situações, no BPEL com SOA Suite, precisamos recuperar/alterar dados em tempo de execução sem ser necessário refazer e re-implantar a aplicação. Para resolver esse problema, o recurso de preferências vem bem a calhar. No JDeveloper, para o Oracle SOA Suite 11g, abra o composite.xml do seu projeto, selecione o componente BPEL e na janela de propriedades (Property Inspector – Ctrl+Shift+I) adicione uma propriedade nova com o nome bpel.preference.<Nome da propriedade>:
Property Inspector
Property Inspector

O código do composite.xml deve ter uma parte parecida com essa:

[sourcecode language=”xml”] <component name="PrefsBPELProcess" version="2.0">
<implementation.bpel src="PrefsBPELProcess.bpel"/>
<property name="bpel.config.transaction" type="xs:string" many="false">required</property>
<property name="bpel.preference.nome" type="xs:string" many="false"
override="may">Sem Nome</property>
</component>[/sourcecode]

]]>
https://thiagovespa.com.br/blog/2013/02/06/preferencias-no-soa-suite/feed/ 0
Spring no SOA Suite https://thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/ https://thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/#comments Wed, 23 Jan 2013 19:43:45 +0000 http://www.thiagovespa.com.br/blog/?p=3806 Continue lendo Spring no SOA Suite→]]> O componente de Spring Context permite que você execute código Java dentro de uma aplicação SOA Suite de maneira mais robusta que o Java Embedding do BPEL.

Crie uma aplicação SOA Suite e no composite.xml, arraste o componente Spring Context (Component Pallete) para a raia do meio.

Create Spring
Create Spring

Clique em OK. Você deverá ter um componente com um folhinha verde no meio do composite. O próximo passo é criar uma interface e uma classe para ser utilizada com o Spring Context. Clique em File, New, Java Interface e clique em OK. Dê um nome, no meu exemplo vou dar o nome de OlaSpring. Clique em OK. Insira o seguinte conteúdo:

]]>
https://thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/feed/ 3
Lendo arquivos de um diretório com File Adapter https://thiagovespa.com.br/blog/2012/08/01/lendo-arquivos-de-um-diretorio-com-file-adapter/ https://thiagovespa.com.br/blog/2012/08/01/lendo-arquivos-de-um-diretorio-com-file-adapter/#comments Wed, 01 Aug 2012 12:46:18 +0000 http://www.thiagovespa.com.br/blog/?p=2519 Continue lendo Lendo arquivos de um diretório com File Adapter→]]> Um dos recursos interessantes é a possibilidade de monitorar o sistema de arquivos pela chegada de novos arquivos e poder processá-los de acordo. A versão nova do File Adapter que vem junto com o Oracle Soa Suite possui esse recurso. Nesse exemplo, vamos criar um projeto que lê os arquivos de um diretório, processa e move para uma pasta.

O primeiro passo é criar um projeto SOA e arrastar o File Adapter para o composite.xml. Na tela de configuração do File Adapter, clique em Next. Dê um nome para o File Adapter e clique em Next. Na próxima tela, deixe marcado para definir o WSDL posteriormente e clique em Next. Escolha a opção Read file, deixa as opções padrões e clique em Next. Especifique os diretório de leitura e marque as opções: “Process files recursively”, “Archive processed files (especifique um diretório)” e “Delete files after successful retrieval”.

File Adapter Configuration Wizard
File Adapter Configuration Wizard

]]>
https://thiagovespa.com.br/blog/2012/08/01/lendo-arquivos-de-um-diretorio-com-file-adapter/feed/ 1
Alterar título do Bpel https://thiagovespa.com.br/blog/2012/08/01/alterar-titulo-do-bpel/ https://thiagovespa.com.br/blog/2012/08/01/alterar-titulo-do-bpel/#respond Wed, 01 Aug 2012 04:30:32 +0000 http://www.thiagovespa.com.br/blog/?p=2376 Continue lendo Alterar título do Bpel→]]> Para alterar o título de um BPEL no Oracle SOA Suite, crie um variável qualquer do tipo string, arraste uma atividade básica do tipo Assign para o começo do processo. Dê dois cliques para editar o Assign e adicione uma regra onde o conteúdo do “from” seja: ora:setCompositeInstanceTitle(‘Título do BPEL’) e do “to” a variável criada.
Edit Assign
Edit Assign

Agora ao executar o processo BPEL, você terá como buscar pelo título no Enterprise Manager:

Recent Instances
Recent Instances

Search
Search

]]>
https://thiagovespa.com.br/blog/2012/08/01/alterar-titulo-do-bpel/feed/ 0
Desabilitar Subversion no JDeveloper https://thiagovespa.com.br/blog/2012/07/31/desabilitar-subversion-no-jdeveloper/ https://thiagovespa.com.br/blog/2012/07/31/desabilitar-subversion-no-jdeveloper/#comments Tue, 31 Jul 2012 23:59:44 +0000 http://www.thiagovespa.com.br/blog/?p=2505 Continue lendo Desabilitar Subversion no JDeveloper→]]> O JDeveloper 11.1.1.6 não trabalha muito bem com o subversion 1.7, pois essa versão não cria uma pasta .svn para cada subpasta e fica apenas um .svn na raiz. Ao executar algumas operações recebi o seguinte erro:
java.lang.OutOfMemoryError: Java heap space
 at java.util.Arrays.copyOf(Arrays.java:2367)
 at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
 at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
 at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
 at java.lang.StringBuffer.append(StringBuffer.java:237)
 at org.tmatesoft.svn.core.SVNErrorMessage.getFullMessage(SVNErrorMessage.java:257)
 at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:58)
 at org.tmatesoft.svn.core.internal.wc.admin.SVNAdminAreaFactory.open(SVNAdminAreaFactory.java:163)
 at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.doOpen(SVNWCAccess.java:364)
 at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.open(SVNWCAccess.java:272)
 at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.open(SVNWCAccess.java:265)
 at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.openAnchor(SVNWCAccess.java:145)
 at org.tmatesoft.svn.core.wc.SVNStatusClient.doStatus(SVNStatusClient.java:320)
 at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:296)
 at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:278)
 at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:480)
 at org.tigris.subversion.svnclientadapter.svnkit.SvnKitClientAdapter.getStatus(SvnKitClientAdapter.java:141)
 at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:466)
 at oracle.jdevimpl.vcs.svn.SVNURLInfoCacheSimpleStrategy.getURLInfo(SVNURLInfoCacheSimpleStrategy.java:79)
 at oracle.jdevimpl.vcs.svn.SVNURLInfoCache.getLastChangedRevision(SVNURLInfoCache.java:69)
 at oracle.jdevimpl.vcs.svn.SVNOverlayProducer.createTooltip(SVNOverlayProducer.java:240)
 at oracle.jdevimpl.vcs.svn.SVNOverlayProducer.getDecoratedOverlay(SVNOverlayProducer.java:144)
 at oracle.jdevimpl.vcs.svn.SVNOverlayProducer.produceOverlay(SVNOverlayProducer.java:113)
 at oracle.jdeveloper.vcs.spi.VCSOverlayItemProducer.produceOverlays(VCSOverlayItemProducer.java:83)
 at oracle.jdeveloper.vcs.spi.VCSOverlayItemProducer.getOverlayItems(VCSOverlayItemProducer.java:65)
 at oracle.jdeveloper.vcs.spi.VCSNodeOverlayTracker.getCompositeElementOverlay(VCSNodeOverlayTracker.java:318)
 at oracle.jdeveloper.vcs.spi.VCSNodeOverlayTracker.getCompositeElementOverlay(VCSNodeOverlayTracker.java:359)
 at oracle.jdeveloper.vcs.spi.VCSNodeOverlayTracker.getOverlays(VCSNodeOverlayTracker.java:261)
 at oracle.ide.explorer.IconOverlayTracker.processPendingNodes(IconOverlayTracker.java:574)
 at oracle.ide.explorer.IconOverlayTracker.access$1400(IconOverlayTracker.java:69)
 at oracle.ide.explorer.IconOverlayTracker$7.run(IconOverlayTracker.java:487)
 at java.util.TimerThread.mainLoop(Timer.java:555)
 java.lang.IllegalStateException: Timer already cancelled.
 at java.util.Timer.sched(Timer.java:397)
 at java.util.Timer.schedule(Timer.java:193)
 at oracle.ide.explorer.IconOverlayTracker._scheduleUpdateTask(IconOverlayTracker.java:498)
 at oracle.ide.explorer.IconOverlayTracker.scheduleUpdateTask(IconOverlayTracker.java:449)
 at oracle.ide.explorer.IconOverlayTracker.repaintConsumerOverlays(IconOverlayTracker.java:432)
 at oracle.ide.explorer.IconOverlayTracker.access$000(IconOverlayTracker.java:69)
 at oracle.ide.explorer.IconOverlayTracker$2.stateChanged(IconOverlayTracker.java:114)
 at oracle.ide.explorer.IconOverlayTracker$NodeWatcher.setVisibleNodes(IconOverlayTracker.java:843)
 at oracle.ide.explorer.IconOverlayTracker$NodeWatcher.removeInternalListeners(IconOverlayTracker.java:860)
 at oracle.ide.explorer.IconOverlayTracker$NodeWatcher.access$2300(IconOverlayTracker.java:713)
 at oracle.ide.explorer.IconOverlayTracker$NodeWatcher$ParentListener.ancestorRemoved(IconOverlayTracker.java:919)
 at javax.swing.AncestorNotifier.fireAncestorRemoved(AncestorNotifier.java:107)
 at javax.swing.AncestorNotifier.propertyChange(AncestorNotifier.java:233)
 at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
 at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
 at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
 at java.awt.Component.firePropertyChange(Component.java:8382)
 at javax.swing.JComponent.removeNotify(JComponent.java:4765)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at oracle.ideimpl.docking.TitledPanel.removeNotify(TitledPanel.java:267)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at java.awt.Container.removeNotify(Container.java:2800)
 at javax.swing.JComponent.removeNotify(JComponent.java:4761)
 at javax.swing.JRootPane.removeNotify(JRootPane.java:764)
 at java.awt.Container.removeNotify(Container.java:2800)
 at java.awt.Window.removeNotify(Window.java:782)
 at java.awt.Frame.removeNotify(Frame.java:1041)
 at java.awt.Window$1DisposeAction.run(Window.java:1190)
 at java.awt.Window.doDispose(Window.java:1205)
 at java.awt.Window.dispose(Window.java:1147)
 at oracle.ide.IdeMainWindow.close(IdeMainWindow.java:408)
 at oracle.ideimpl.MainWindowImpl.close(MainWindowImpl.java:605)
 at oracle.ide.IdeMainWindow$1.close(IdeMainWindow.java:327)
 at oracle.ide.cmd.ExitCommand.doit(ExitCommand.java:434)
 at oracle.ide.controller.CommandProcessor.invoke(CommandProcessor.java:317)
 at oracle.jdevimpl.merge.MergeExitCommand.doit(MergeExitCommand.java:48)
 at oracle.ide.controller.CommandProcessor.invoke(CommandProcessor.java:317)
 at oracle.ide.IdeCore.quit(IdeCore.java:786)
 at oracle.ide.Ide.quit(Ide.java:604)
 at oracle.ide.Ide.quit(Ide.java:611)
 at oracle.ideimpl.extension.preference.ConfigureExtensionCommand.doit(ConfigureExtensionCommand.java:113)
 at oracle.ide.controller.CommandProcessor.invoke(CommandProcessor.java:317)
 at oracle.ide.controller.IdeAction.performAction(IdeAction.java:556)
 at oracle.ide.controller.IdeAction.actionPerformedImpl(IdeAction.java:897)
 at oracle.ide.controller.IdeAction.actionPerformed(IdeAction.java:501)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
 at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
 at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
 at org.java.ayatana.ApplicationMenu$4.run(ApplicationMenu.java:486)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
 at java.awt.EventQueue.access$000(EventQueue.java:102)
 at java.awt.EventQueue$3.run(EventQueue.java:662)
 at java.awt.EventQueue$3.run(EventQueue.java:660)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

]]>
https://thiagovespa.com.br/blog/2012/07/31/desabilitar-subversion-no-jdeveloper/feed/ 1
Arquivos não XML no File Adapter https://thiagovespa.com.br/blog/2012/07/31/arquivos-nao-xml-no-file-adapter/ https://thiagovespa.com.br/blog/2012/07/31/arquivos-nao-xml-no-file-adapter/#respond Tue, 31 Jul 2012 21:59:13 +0000 http://www.thiagovespa.com.br/blog/?p=2496 Continue lendo Arquivos não XML no File Adapter→]]> O File Adapter citado no post anterior pode ser utilizado para gravar arquivos diferentes de XML, com arquivos CSV, textos, cobol copybook e afins. Para esse tipo de arquivo, na etapa 6 do File Adapter Configuration Wizard, ao invés de especificar a URL, você deve selecionar a engrenagem ao lado da lupa.
Native Format Builder: Welcome
Native Format Builder: Welcome

Clique em Next. No nosso exemplo, vamos utilizar a opção Fixed Length que é um formato bastante utilizado para troca de informações entre empresas bancárias, mas sinta-se livre para aventurar em outros formatos, como o Delimited, Complex Type, DTD to XSD ou Cobol Copybook. Clique em Next. Na próxima tela, escolha um arquivo que tenha um exemplo de saída desejada. Para facilitar você pode utilizar o meu arquivo. Selecione o Character set como UTF-8 que é o Character set do meu arquivo e clique em Next.

]]>
https://thiagovespa.com.br/blog/2012/07/31/arquivos-nao-xml-no-file-adapter/feed/ 0
Gravação em arquivo com File Adapter no Oracle SOA Suite https://thiagovespa.com.br/blog/2012/07/31/gravacao-em-arquivo-com-file-adapter-no-oracle-soa-suite/ https://thiagovespa.com.br/blog/2012/07/31/gravacao-em-arquivo-com-file-adapter-no-oracle-soa-suite/#respond Tue, 31 Jul 2012 12:16:18 +0000 http://www.thiagovespa.com.br/blog/?p=2483 Continue lendo Gravação em arquivo com File Adapter no Oracle SOA Suite→]]> Crie uma aplicação SOA no JDeveloper e crie um BPEL Síncrono, conforme imagem abaixo:
Create BPEL Process
Create BPEL Process

No XSD criado (normalmente NomeDoBPEL.xsd), edite os dados de entrada e de saída. No nosso exemplo, vamos criar um processo BPEL que receba uma lista de pessoas (nome e telefone), grave no arquivo e retorne a quantidade de registros gravados. Para simplificar, não vamos criar um XSD simples, sem import e afins, então vamos utilizar o seguinte:

]]>
https://thiagovespa.com.br/blog/2012/07/31/gravacao-em-arquivo-com-file-adapter-no-oracle-soa-suite/feed/ 0
Regras no BPEL https://thiagovespa.com.br/blog/2012/02/07/regras-no-bpel/ https://thiagovespa.com.br/blog/2012/02/07/regras-no-bpel/#respond Tue, 07 Feb 2012 19:19:19 +0000 http://www.thiagovespa.com.br/blog/?p=2207 Continue lendo Regras no BPEL→]]> O SOA Suite tem um componente muito bom para trabalhar com regras de negócios: o Oracle Business Rules. Ele permite a gente criar regras de maneira simples, utilizando estruturas IF/THEN ou tabelas de decisões que podem ser manipuladas em tempo de execução. O foco desse post é mostrar como utilizar esses componentes dentro de um BPEL, mas ele pode ser utilizado em conjunto com outros componentes ou como um serviço standalone inclusive.

Crie um projeto com um BPEL síncrono, conforme descrito neste post, mas sem o For Each. Altere o xsd do BPEL para que o input, seja do tipo integer. Entre o elemento receiveInput e replyOutput, arraste um componente de Business Rules. Dê dois cliques para editar e clique no “+” para adicionar um novo dicionário. Especifique um nome (IdadeOracleRules), clique em “+” e Add Input Variable, para adicionar uma variável de entrada. Selecione o nó Variables e clique em “+”. Informe o nome “idade”. Clique na lupa, selecione o xsd dentro de Project Schema Files e escolha o variável de entrada do processo (process). Na aba initialize, informe o seguinte XPath: $inputVariable.payload para inicializar a variável de entrada com o valor de entrada do processo. Clique OK e faça o mesmo para a variável de saída (output), mas sem a necessidade de inicializar, crie a variável com o nome mensagem. Você deverá obter o seguinte resultado:

]]>
https://thiagovespa.com.br/blog/2012/02/07/regras-no-bpel/feed/ 0
Exemplo BPEL com For Each https://thiagovespa.com.br/blog/2012/02/06/exemplo-bpel-com-for-each/ https://thiagovespa.com.br/blog/2012/02/06/exemplo-bpel-com-for-each/#respond Mon, 06 Feb 2012 13:53:18 +0000 http://www.thiagovespa.com.br/blog/?p=2185 Continue lendo Exemplo BPEL com For Each→]]> Uma dúvida muito comum para quem está iniciando em BPEL é como iterar sobre um array. Nesse post vou mostrar como realizar essa tarefa utilizando um elemento For Each. O primeiro passo é criar um projeto BPEL e adicionar o nó For Each. com os valores adequados.

Vá em File, New, SOA Application e clique OK. Dê um nome para a sua aplicação (no meu caso: ExemploForBPELApplication) e clique em Next. Dê um nome para o projeto (ExemploForBPELProject) e clique em Next. Selecione Composite With BPEL Process e clique em Finish. Informe os dados do processo (no nosso exemplo será síncrono) e clique em OK.

Create BPEL Process
Create BPEL Process

Abra o XSD criado. Altere a string de entrada para permitir mais de uma string de entrada. Altere o valor do minOccurs para 0 e do maxOccurs para unbounded. Altere o name para algo mais expressivo, como “nome”.

O resultado final é o seguinte:

]]>
https://thiagovespa.com.br/blog/2012/02/06/exemplo-bpel-com-for-each/feed/ 0
Desabilitando o WS-Addressing no SOA Suite https://thiagovespa.com.br/blog/2011/12/30/desabilitando-o-ws-addressing-no-soa-suite/ https://thiagovespa.com.br/blog/2011/12/30/desabilitando-o-ws-addressing-no-soa-suite/#respond Fri, 30 Dec 2011 19:17:39 +0000 http://www.thiagovespa.com.br/blog/?p=2079 Continue lendo Desabilitando o WS-Addressing no SOA Suite→]]> Esses dias tive um problema com um projeto da Índia. O cliente, ao realizar a chamada pra um serviço que eu desenvolvi, recebia o seguinte erro:

A required header representing a Message Addressing Property is not present

Os testes realizados no SOAP-UI e cliente WS criado não apresentavam nenhum erro, então ficava difícil simular o ocorrido. Pela mensagem informada, podemos ter dois tipos de erro:

  • O cliente está adicionando um header na requisição inválido
  • Ou o servidor está esperando um header que o cliente não enviou

]]>
https://thiagovespa.com.br/blog/2011/12/30/desabilitando-o-ws-addressing-no-soa-suite/feed/ 0