GVKun编程网logo

如何使用TextMessage将XML文件发送到JMS队列?(xml怎么发送)

17

在这篇文章中,我们将带领您了解如何使用TextMessage将XML文件发送到JMS队列?的全貌,包括xml怎么发送的相关情况。同时,我们还将为您介绍有关ActiveMQ/PHPStomp使用Text

在这篇文章中,我们将带领您了解如何使用TextMessage将XML文件发送到JMS队列?的全貌,包括xml怎么发送的相关情况。同时,我们还将为您介绍有关ActiveMQ / PHP Stomp使用TextMessage而不是BytesMessage、c# – 如何使用Linq to XML将XML保存在XML文件中?、com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码、Gettext和PHP 5.3.5 xampp-使用未定义的常数LC_MESSAGES-假定为“ LC_MESSAGES”的知识,以帮助您更好地理解这个主题。

本文目录一览:

如何使用TextMessage将XML文件发送到JMS队列?(xml怎么发送)

如何使用TextMessage将XML文件发送到JMS队列?(xml怎么发送)

Oracle文档说-

TextMessage对象用于发送包含java.lang.String的消息。它从Message界面继承>,并添加文本消息正文。此消息类型可用于传输基于文本的消息,包括XML>
content的消息。

这怎么可能?XML的内容是否仅是可发送的(通过将其转换为对象然后发送)?是否可以将XML文件以任何方式真正放入队列,然后在接收方读取?

答案1

小编典典

请使用它,并且您发送的对象必须可序列化

class Master implements serializable {   List<File> f=new ArrayList<File>();  //getter and setter }

根据需要添加–xml文件

     Master eMaster = new Master();    eMaster.setF();    //add Files here    QueueSender queueSender = queueSession.createSender(queue1);    ObjectMessage objMessage = queueSession.createObjectMessage();    objMessage.setObject(eMaster);    queueSender.send(objMessage);

接收端:

        Master em =null;        Message message = queueReceiver.receive(1);        if (message instanceof ObjectMessage                && ((ObjectMessage) message).getObject() instanceof Master) {            em = (Master) ((ObjectMessage) message).getObject();            //use this and get list of xml file and iterate and process xml file by             //below link        }

1个XML解析链接在这里

2个xml解析链接在这里

ActiveMQ / PHP Stomp使用TextMessage而不是BytesMessage

ActiveMQ / PHP Stomp使用TextMessage而不是BytesMessage

当我使用PHP-Stomp向ActiveMQ发送消息时,消息将作为BytesMessage发送.但是我想发送一个TextMessage.

根据STOMP documentation,这可以通过不发送内容长度标题来实现:

… The protocol does however support a content-length
header. To provide more robust interaction between Stomp and JMS
clients, ActiveMQ keys off of the inclusion of this header to
determine what message type to create when sending from Stomp to JMS.
The logic is simple:

Inclusion of content-length header => Resulting Message

yes => BytesMessage

no => TextMessage

This same logic can be followed when going from JMS to Stomp, as well.
A Stomp client Could be written to key off of the inclusion of the
content-length header to determine what type of message structure to
provide to the user.

在我的测试PHP脚本中,我没有定义内容长度标题,它似乎是自动添加的.
我也尝试将content-length传递为0,false或null.在所有这些情况下,它都会生成BytesMessage.

所以我的问题是,如何生成Textmessage而不是BytesMessage.

我的代码如下所示:

<?PHP

$stomp = new Stomp('tcp://localhost:61613');
$stomp->send('/topic/test.central_message_topic', 'testmessage', [
    "persistent" => "true",
]);

解决方法:

这已经很久了,但这对我有用:

try {  
$stomp->send("your_queue", "your_message", array("amq-msg-type" => "text"));
} catch (StompException $e) {  
die('send Failed: ' . $e->getMessage());
}

c# – 如何使用Linq to XML将XML保存在XML文件中?

c# – 如何使用Linq to XML将XML保存在XML文件中?

我正在尝试使用 Linq to XML来保存&在 XML文件和 Windows窗体应用程序之间检索一些HTML.当它将其保存到XML文件时,HTML标记将获得xml编码,并且不会保存为直接HTML.

示例HTML:

<P><FONT color=#004080><U>Sample HTML</U></FONT></P>

保存在XML文件中:

&lt;P&gt;&lt;FONT color=#004080&gt;&lt;U&gt;Sample HTML&lt;/U&gt;&lt;/FONT&gt;&lt;/P&gt;

当我手动编辑XML文件并输入所需的HTML时,Linq会拉入HTML并正确显示它.

以下是将HTML保存到XML文件的代码:

XElement currentReport = (from item in callReports.Descendants("callReport")
                                  where (int)item.Element("localId") == myCallreports.LocalId
                                  select item).FirstOrDefault();

        currentReport.Element("studio").Value = myCallreports.Studio;
        currentReport.Element("visitDate").Value = myCallreports.Visitdate.ToShortDateString();
       // *** The next two XElements store the HTML
        currentReport.Element("recomendations").Value = myCallreports.Comments;
        currentReport.Element("reactions").Value = myCallreports.Ownerreaction;

我假设这是发生了xml编码的b / c,但我不知道如何处理它. This question给了我一些线索……但没有答案(对我而言,至少).

谢谢您的帮助,

奥兰

解决方法

设置Value属性将自动编码html字符串.这应该可以解决问题,但您需要确保HTML是有效的XML(XHTML).
currentReport.Element("recomendations").ReplaceNodes(XElement.Parse(myCallreports.Comments));

编辑:您可能需要将用户输入的HTML包装在< div>中< / DIV>标签. XElement.Parse期望找到至少包含起始和结束xml标记的字符串.所以,这可能会更好:

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<div>" + myCallreports.Comments + "</div>"));

然后你只需要确保像< br>这样的标签.正在< br />中发送.

编辑2:另一个选项是使用XML CDATA.用<![CDATA [和]]>包装HTML,但我从来没有实际使用过,我不确定它是如何影响读取xml的.

currentReport.Element("recomendations").ReplaceNodes(XElement.Parse("<![CDATA[" + myCallreports.Comments + "]]>"));

com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码

com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码

项目:protobuf-el    文件:OptionResolver.java   
private <MType extends ExtendableMessage<MType>,BType extends ExtendableBuilder<MType,BType>> boolean resolveUninterpretedOptions(
    final BType optionsBuilder,final FieldDescriptor uninterpretedField) {
  ensureRegistry();
  boolean anyUninterpetedOptionResolved = false;
  @SuppressWarnings("unchecked")
  final List<UninterpretedOption> options =
      new ArrayList<UninterpretedOption>(
          (List<UninterpretedOption>) optionsBuilder.getField(uninterpretedField));

  for (final Iterator<UninterpretedOption> iterator = options.iterator(); iterator.hasNext();) {
    final UninterpretedOption option = iterator.next();

    if (resolveUninterpretedOption(option,optionsBuilder)) {
      anyUninterpetedOptionResolved = true;
      iterator.remove();
    }
  }

  if (options.isEmpty()) {
    optionsBuilder.clearField(uninterpretedField);
  } else {
    optionsBuilder.setField(uninterpretedField,options);
  }

  return anyUninterpetedOptionResolved;
}
项目:protobuf-el    文件:OptionResolver.java   
private <MType extends ExtendableMessage<MType>,BType>> boolean resolveUninterpretedOption(
    final UninterpretedOptionorBuilder option,final BType optionsBuilder) {
  if (option.getNameCount() == 0) {
    throw new IllegalArgumentException("custom option cannot be empty");
  }

  if (!option.getName(0).getIsExtension()) {
    throw new IllegalArgumentException("custom option name should start with '('");
  }

  final Map.Entry<FieldDescriptor,Object> fieldValue;

  if (option.getNameCount() == 1) {
    fieldValue = processUninterpretedOptionValue(option,optionsBuilder);
  } else {
    fieldValue = processUninterpretedOptionMessage(option,optionsBuilder);
  }

  if (fieldValue == null) {
    return false;
  }

  final FieldDescriptor field = fieldValue.getKey();
  final Object value = fieldValue.getValue();

  if (field == null || value == null) {
    // the UninterpretedOption is not resolved
    return false;
  }

  if (field.isRepeated()) {
    optionsBuilder.addRepeatedField(field,value);
  } else {
    optionsBuilder.setField(field,value);
  }

  return true;
}
项目:protobuf-el    文件:OptionResolver.java   
private <MType extends ExtendableMessage<MType>,BType>> boolean buildOptions(
    final BType optionsBuilder) {
  final FieldDescriptor uninterpretedField =
      getFD(optionsBuilder,UNINTERPRETED_OPTION_FIELD_NUMBER);
  final boolean isUninterpretedEmpty =
      optionsBuilder.getRepeatedFieldCount(uninterpretedField) == 0;
  final boolean anyUninterpetedOptionResolved =
      !isUninterpretedEmpty && resolveUninterpretedOptions(optionsBuilder,uninterpretedField);
  final boolean isUnkNownFieldsEmpty = optionsBuilder.getUnkNownFields().asMap().isEmpty();
  Map<FieldDescriptor,Object> allFields = null;

  if (isUninterpretedEmpty && isUnkNownFieldsEmpty) {
    allFields = optionsBuilder.getAllFields();

    if (allFields.isEmpty()) {
      return false;
    }
  }

  if (customOptionsAsExtensions) {
    if (!isUnkNownFieldsEmpty) {
      reparseBuilder(optionsBuilder,ensureRegistry());
    }
  } else {
    boolean anyExtension = anyUninterpetedOptionResolved;

    if (!anyUninterpetedOptionResolved) {
      if (allFields == null) {
        allFields = optionsBuilder.getAllFields();
      }

      for (final FieldDescriptor fd : allFields.keySet()) {
        if (fd.isExtension()) {
          anyExtension = true;
          break;
        }
      }
    }

    if (anyExtension) {
      reparseBuilder(optionsBuilder,ExtensionRegistry.getEmptyRegistry());
    }
  }

  return true;
}

Gettext和PHP 5.3.5 xampp-使用未定义的常数LC_MESSAGES-假定为“ LC_MESSAGES”

Gettext和PHP 5.3.5 xampp-使用未定义的常数LC_MESSAGES-假定为“ LC_MESSAGES”

我收到以下错误:

Notice: Use of undefined constant LC_MESSAGES - assumed 'LC_MESSAGES' in C:\Program Files\xampp\htdocs\xampp\PHPtest\resources\testi18n.PHP on line 19

Notice: Undefined index: language in C:\Program Files\xampp\htdocs\xampp\PHPtest\resources\testi18n.PHP on line 19

Deprecated: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead in C:\Program Files\xampp\htdocs\xampp\PHPtest\resources\testi18n.PHP on line 19

编码:

<?PHP

  setlocale( LC_MESSAGES, $_GET['language']);

  bindtextdomain('messages', 'locale');
...
 ?>

我测试了gettext扩展是否与PHP一起安装(受支持)

解决方法:

参见manual(重点是我的):

LC_MESSAGES for system responses (available if PHP was compiled with libintl)

LC_ALL可能是您有用的替代品.

我们今天的关于如何使用TextMessage将XML文件发送到JMS队列?xml怎么发送的分享已经告一段落,感谢您的关注,如果您想了解更多关于ActiveMQ / PHP Stomp使用TextMessage而不是BytesMessage、c# – 如何使用Linq to XML将XML保存在XML文件中?、com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码、Gettext和PHP 5.3.5 xampp-使用未定义的常数LC_MESSAGES-假定为“ LC_MESSAGES”的相关信息,请在本站查询。

本文标签: