mirror of https://github.com/apache/activemq.git
AMQ-656: Applying patch_060518.zip. Moving scripts (under gram) to activemq-core.
git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@409828 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
14fda24c87
commit
a3b0e8ad7f
|
@ -29,7 +29,7 @@ public abstract class OpenWireCppClassesScript extends OpenWireClassesScript {
|
|||
public Object run() {
|
||||
filePostFix = getFilePostFix();
|
||||
if (destDir == null) {
|
||||
destDir = new File("../openwire-cpp/src/command");
|
||||
destDir = new File("../openwire-cpp/src/main/cpp/activemq/command");
|
||||
}
|
||||
return super.run();
|
||||
}
|
||||
|
@ -52,13 +52,13 @@ public abstract class OpenWireCppClassesScript extends OpenWireClassesScript {
|
|||
else if( name.equals("DataStructure[]") )
|
||||
name = "IDataStructure[]" ;
|
||||
|
||||
return "ap<" + name.substring(0, name.length()-2) + ">";
|
||||
return "array<" + name.substring(0, name.length()-2) + ">";
|
||||
}
|
||||
else if (name.equals("Throwable") || name.equals("Exception")) {
|
||||
return "p<BrokerError>";
|
||||
}
|
||||
else if (name.equals("ByteSequence")) {
|
||||
return "char*";
|
||||
return "array<char>";
|
||||
}
|
||||
else if (name.equals("boolean")) {
|
||||
return "bool";
|
||||
|
@ -84,6 +84,126 @@ public abstract class OpenWireCppClassesScript extends OpenWireClassesScript {
|
|||
* Converts the Java type to a C++ default value
|
||||
*/
|
||||
public String toCppDefaultValue(JClass type) {
|
||||
return "0";
|
||||
String name = type.getSimpleName();
|
||||
|
||||
if ( name.equals("boolean") ) {
|
||||
return "false";
|
||||
}
|
||||
else if (!type.isPrimitiveType()) {
|
||||
return "NULL";
|
||||
}
|
||||
else {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to the name of the C++ marshal method
|
||||
* to be used
|
||||
*/
|
||||
public String toMarshalMethodName(JClass type) {
|
||||
String name = type.getSimpleName();
|
||||
if (name.equals("String")) {
|
||||
return "marshalString";
|
||||
}
|
||||
else if (type.isArrayType()) {
|
||||
if ( type.getArrayComponentType().isPrimitiveType() && name.equals("byte[]") )
|
||||
return "marshalByteArray" ;
|
||||
else
|
||||
return "marshalObjectArray" ;
|
||||
}
|
||||
else if ( name.equals("ByteSequence") ) {
|
||||
return "marshalByteArray";
|
||||
}
|
||||
else if (name.equals("short") ) {
|
||||
return "marshalShort";
|
||||
}
|
||||
else if (name.equals("int") ) {
|
||||
return "marshalInt";
|
||||
}
|
||||
else if (name.equals("long") ) {
|
||||
return "marshalLong";
|
||||
}
|
||||
else if (name.equals("byte")) {
|
||||
return "marshalByte";
|
||||
}
|
||||
else if (name.equals("double")) {
|
||||
return "marshalDouble";
|
||||
}
|
||||
else if (name.equals("float")) {
|
||||
return "marshalFloat";
|
||||
}
|
||||
else if (name.equals("boolean")) {
|
||||
return "marshalBoolean";
|
||||
}
|
||||
else if( !type.isPrimitiveType() ) {
|
||||
return "marshalObject" ;
|
||||
}
|
||||
else {
|
||||
return name ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to the name of the C++ unmarshal method
|
||||
* to be used
|
||||
*/
|
||||
public String toUnmarshalMethodName(JClass type) {
|
||||
String name = type.getSimpleName();
|
||||
if (name.equals("String")) {
|
||||
return "unmarshalString";
|
||||
}
|
||||
else if (type.isArrayType()) {
|
||||
if ( type.getArrayComponentType().isPrimitiveType() && name.equals("byte[]") )
|
||||
return "unmarshalByteArray" ;
|
||||
else
|
||||
return "unmarshalObjectArray" ;
|
||||
}
|
||||
else if ( name.equals("ByteSequence") ) {
|
||||
return "unmarshalByteArray";
|
||||
}
|
||||
else if (name.equals("short") ) {
|
||||
return "unmarshalShort";
|
||||
}
|
||||
else if (name.equals("int") ) {
|
||||
return "unmarshalInt";
|
||||
}
|
||||
else if (name.equals("long") ) {
|
||||
return "unmarshalLong";
|
||||
}
|
||||
else if (name.equals("byte")) {
|
||||
return "unmarshalByte";
|
||||
}
|
||||
else if (name.equals("double")) {
|
||||
return "unmarshalDouble";
|
||||
}
|
||||
else if (name.equals("float")) {
|
||||
return "unmarshalFloat";
|
||||
}
|
||||
else if (name.equals("boolean")) {
|
||||
return "unmarshalBoolean";
|
||||
}
|
||||
else if( !type.isPrimitiveType() ) {
|
||||
return "unmarshalObject" ;
|
||||
}
|
||||
else {
|
||||
return name ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to a C++ pointer cast
|
||||
*/
|
||||
public String toUnmarshalCast(JClass type) {
|
||||
String name = toCppType(type) ;
|
||||
|
||||
if( name.startsWith("p<") )
|
||||
return "p_cast<" + name.substring(2) ;
|
||||
else if( name.startsWith("array<") &&
|
||||
(type.isArrayType() && !type.getArrayComponentType().isPrimitiveType()) &&
|
||||
!type.getSimpleName().equals("ByteSequence") )
|
||||
return "array_cast<" + name.substring(6) ;
|
||||
else
|
||||
return "" ;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,92 +1,125 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import org.apache.activemq.openwire.tool.OpenWireCppClassesScript
|
||||
|
||||
/**
|
||||
* Generates the C++ commands for the Open Wire Format
|
||||
*
|
||||
* @version $Revision$
|
||||
*/
|
||||
class GenerateCppClasses extends OpenWireCppClassesScript {
|
||||
|
||||
void generateFile(PrintWriter out) {
|
||||
out << """/*
|
||||
* Copyright 2006 The Apache Software Foundation or its licensors, as
|
||||
* applicable.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "command/${className}.hpp"
|
||||
|
||||
using namespace apache::activemq::client::command;
|
||||
|
||||
/*
|
||||
*
|
||||
* Marshalling code for Open Wire Format for ${className}
|
||||
*
|
||||
*
|
||||
* NOTE!: This file is autogenerated - do not modify!
|
||||
* if you need to make a change, please see the Groovy scripts in the
|
||||
* activemq-core module
|
||||
*
|
||||
*/
|
||||
${className}::${className}()
|
||||
{"""
|
||||
for (property in properties) {
|
||||
def value = toCppDefaultValue(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
this->${parameterName} = ${value} ;"""
|
||||
}
|
||||
out << """
|
||||
}
|
||||
|
||||
${className}::~${className}()
|
||||
{
|
||||
}
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
|
||||
${type} ${className}::get${propertyName}()
|
||||
{
|
||||
return ${parameterName} ;
|
||||
}
|
||||
|
||||
void ${className}::set${propertyName}(${type} ${parameterName})
|
||||
{
|
||||
this->${parameterName} = ${parameterName} ;
|
||||
}
|
||||
"""
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import org.apache.activemq.openwire.tool.OpenWireCppClassesScript
|
||||
|
||||
/**
|
||||
* Generates the C++ commands for the Open Wire Format
|
||||
*
|
||||
* @version $Revision$
|
||||
*/
|
||||
class GenerateCppClasses extends OpenWireCppClassesScript {
|
||||
|
||||
void generateFile(PrintWriter out) {
|
||||
out << """/*
|
||||
* Copyright 2006 The Apache Software Foundation or its licensors, as
|
||||
* applicable.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "activemq/command/${className}.hpp"
|
||||
|
||||
using namespace apache::activemq::command;
|
||||
|
||||
/*
|
||||
*
|
||||
* Command and marshalling code for OpenWire format for ${className}
|
||||
*
|
||||
*
|
||||
* NOTE!: This file is autogenerated - do not modify!
|
||||
* if you need to make a change, please see the Groovy scripts in the
|
||||
* activemq-core module
|
||||
*
|
||||
*/
|
||||
${className}::${className}()
|
||||
{"""
|
||||
for (property in properties) {
|
||||
def value = toCppDefaultValue(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
this->${parameterName} = ${value} ;"""
|
||||
}
|
||||
out << """
|
||||
}
|
||||
|
||||
${className}::~${className}()
|
||||
{
|
||||
}
|
||||
|
||||
unsigned char ${className}::getDataStructureType()
|
||||
{
|
||||
return ${className}::TYPE ;
|
||||
}
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
|
||||
${type} ${className}::get${propertyName}()
|
||||
{
|
||||
return ${parameterName} ;
|
||||
}
|
||||
|
||||
void ${className}::set${propertyName}(${type} ${parameterName})
|
||||
{
|
||||
this->${parameterName} = ${parameterName} ;
|
||||
}
|
||||
"""
|
||||
}
|
||||
out << """
|
||||
int ${className}::marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException)
|
||||
{
|
||||
int size = 0 ;
|
||||
|
||||
size += ${baseClass}::marshal(marshaller, mode, ostream) ; """
|
||||
for (property in properties) {
|
||||
def marshalMethod = toMarshalMethodName(property.type)
|
||||
def propertyName = decapitalize(property.simpleName)
|
||||
out << """
|
||||
size += marshaller->${marshalMethod}(${propertyName}, mode, ostream) ; """
|
||||
}
|
||||
out << """
|
||||
return size ;
|
||||
}
|
||||
|
||||
void ${className}::unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException)
|
||||
{
|
||||
${baseClass}::unmarshal(marshaller, mode, istream) ; """
|
||||
for (property in properties) {
|
||||
def cast = toUnmarshalCast(property.type)
|
||||
def unmarshalMethod = toUnmarshalMethodName(property.type)
|
||||
def propertyName = decapitalize(property.simpleName)
|
||||
out << """
|
||||
${propertyName} = ${cast}(marshaller->${unmarshalMethod}(mode, istream)) ; """
|
||||
}
|
||||
out << """
|
||||
}
|
||||
"""
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,17 +40,17 @@ class GenerateCppHeaders extends OpenWireCppHeadersScript {
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef ${className}_hpp_
|
||||
#define ${className}_hpp_
|
||||
#ifndef ActiveMQ_${className}_hpp_
|
||||
#define ActiveMQ_${className}_hpp_
|
||||
|
||||
// Turn off warning message for ignored exception specification
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning( disable : 4290 )
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
"""
|
||||
if( baseClass.equals("BrokerError") )
|
||||
out << """#include "${baseClass}.hpp"
|
||||
"""
|
||||
else
|
||||
out << """#include "command/${baseClass}.hpp"
|
||||
|
||||
out << """#include "activemq/command/${baseClass}.hpp"
|
||||
"""
|
||||
for (property in properties)
|
||||
{
|
||||
|
@ -65,38 +65,42 @@ for (property in properties)
|
|||
if( arrayType.isPrimitiveType() )
|
||||
continue ;
|
||||
}
|
||||
if( includeName.startsWith("ap<") )
|
||||
includeName = includeName.substring(3, includeName.length()-1) ;
|
||||
if( includeName.startsWith("array<") )
|
||||
includeName = includeName.substring(6, includeName.length()-1) ;
|
||||
else if( includeName.startsWith("p<") )
|
||||
includeName = includeName.substring(2, includeName.length()-1)
|
||||
|
||||
if( includeName.equals("BrokerError") )
|
||||
out << """#include "${includeName}.hpp"
|
||||
if( includeName.equals("IDataStructure") )
|
||||
out << """#include "activemq/${includeName}.hpp"
|
||||
"""
|
||||
else
|
||||
out << """#include "command/${includeName}.hpp"
|
||||
out << """#include "activemq/command/${includeName}.hpp"
|
||||
"""
|
||||
}
|
||||
}
|
||||
out << """
|
||||
#include "util/ifr/ap.hpp"
|
||||
#include "util/ifr/p.hpp"
|
||||
#include "activemq/protocol/IMarshaller.hpp"
|
||||
#include "ppr/io/IOutputStream.hpp"
|
||||
#include "ppr/io/IInputStream.hpp"
|
||||
#include "ppr/io/IOException.hpp"
|
||||
#include "ppr/util/ifr/array"
|
||||
#include "ppr/util/ifr/p"
|
||||
|
||||
namespace apache
|
||||
{
|
||||
namespace activemq
|
||||
{
|
||||
namespace client
|
||||
namespace command
|
||||
{
|
||||
namespace command
|
||||
{
|
||||
using namespace ifr;
|
||||
using namespace std;
|
||||
using namespace apache::activemq::client;
|
||||
using namespace ifr;
|
||||
using namespace std;
|
||||
using namespace apache::activemq;
|
||||
using namespace apache::activemq::protocol;
|
||||
using namespace apache::ppr::io;
|
||||
|
||||
/*
|
||||
*
|
||||
* Marshalling code for Open Wire Format for ${className}
|
||||
* Command and marshalling code for OpenWire format for ${className}
|
||||
*
|
||||
*
|
||||
* NOTE!: This file is autogenerated - do not modify!
|
||||
|
@ -106,7 +110,7 @@ namespace apache
|
|||
*/
|
||||
class ${className} : public ${baseClass}
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
|
@ -116,13 +120,13 @@ private:
|
|||
}
|
||||
out << """
|
||||
public:
|
||||
const static int TYPE = ${getOpenWireOpCode(jclass)};
|
||||
const static unsigned char TYPE = ${getOpenWireOpCode(jclass)};
|
||||
|
||||
public:
|
||||
${className}() ;
|
||||
virtual ~${className}() ;
|
||||
|
||||
virtual int getCommandType() ;
|
||||
virtual unsigned char getDataStructureType() ;
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
|
@ -134,16 +138,16 @@ public:
|
|||
"""
|
||||
}
|
||||
out << """
|
||||
|
||||
virtual int marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException) ;
|
||||
virtual void unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException) ;
|
||||
} ;
|
||||
|
||||
/* namespace */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /*${className}_hpp_*/
|
||||
#endif /*ActiveMQ_${className}_hpp_*/
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,8 +105,8 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="src"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
|
||||
AdditionalIncludeDirectories="src\main\cpp"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0400"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="$(IntDir)\amqlib.pdb"
|
||||
|
@ -1098,6 +1098,10 @@
|
|||
RelativePath=".\src\main\cpp\ppr\io\encoding\CharsetEncoderRegistry.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\main\cpp\ppr\io\encoding\CharsetEncodingException.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\main\cpp\ppr\io\encoding\ICharsetEncoder.hpp"
|
||||
>
|
||||
|
|
|
@ -119,10 +119,10 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="..\src"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
AdditionalIncludeDirectories="src\main\cpp"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0400"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="2"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="$(IntDir)\test.pdb"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
|
@ -139,8 +139,9 @@
|
|||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
|
|
|
@ -1,209 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.activemq.openwire.tool;
|
||||
|
||||
import org.codehaus.jam.JClass;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Revision: 379824 $
|
||||
*/
|
||||
public abstract class OpenWireCppClassesScript extends OpenWireClassesScript {
|
||||
|
||||
public Object run() {
|
||||
filePostFix = getFilePostFix();
|
||||
if (destDir == null) {
|
||||
destDir = new File("../openwire-cpp/src/main/cpp/activemq/command");
|
||||
}
|
||||
return super.run();
|
||||
}
|
||||
|
||||
protected String getFilePostFix() {
|
||||
return ".cpp";
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to a C++ type name
|
||||
*/
|
||||
public String toCppType(JClass type) {
|
||||
String name = type.getSimpleName();
|
||||
if (name.equals("String")) {
|
||||
return "p<string>";
|
||||
}
|
||||
else if (type.isArrayType()) {
|
||||
if( name.equals("byte[]") )
|
||||
name = "char[]" ;
|
||||
else if( name.equals("DataStructure[]") )
|
||||
name = "IDataStructure[]" ;
|
||||
|
||||
return "array<" + name.substring(0, name.length()-2) + ">";
|
||||
}
|
||||
else if (name.equals("Throwable") || name.equals("Exception")) {
|
||||
return "p<BrokerError>";
|
||||
}
|
||||
else if (name.equals("ByteSequence")) {
|
||||
return "array<char>";
|
||||
}
|
||||
else if (name.equals("boolean")) {
|
||||
return "bool";
|
||||
}
|
||||
else if (name.equals("long")) {
|
||||
return "long long";
|
||||
}
|
||||
else if (name.equals("byte")) {
|
||||
return "char";
|
||||
}
|
||||
else if( name.equals("Command") || name.equals("DataStructure") ) {
|
||||
return "p<I" + name + ">" ;
|
||||
}
|
||||
else if( !type.isPrimitiveType() ) {
|
||||
return "p<" + name + ">" ;
|
||||
}
|
||||
else {
|
||||
return name ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to a C++ default value
|
||||
*/
|
||||
public String toCppDefaultValue(JClass type) {
|
||||
String name = type.getSimpleName();
|
||||
|
||||
if ( name.equals("boolean") ) {
|
||||
return "false";
|
||||
}
|
||||
else if (!type.isPrimitiveType()) {
|
||||
return "NULL";
|
||||
}
|
||||
else {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to the name of the C++ marshal method
|
||||
* to be used
|
||||
*/
|
||||
public String toMarshalMethodName(JClass type) {
|
||||
String name = type.getSimpleName();
|
||||
if (name.equals("String")) {
|
||||
return "marshalString";
|
||||
}
|
||||
else if (type.isArrayType()) {
|
||||
if ( type.getArrayComponentType().isPrimitiveType() && name.equals("byte[]") )
|
||||
return "marshalByteArray" ;
|
||||
else
|
||||
return "marshalObjectArray" ;
|
||||
}
|
||||
else if ( name.equals("ByteSequence") ) {
|
||||
return "marshalByteArray";
|
||||
}
|
||||
else if (name.equals("short") ) {
|
||||
return "marshalShort";
|
||||
}
|
||||
else if (name.equals("int") ) {
|
||||
return "marshalInt";
|
||||
}
|
||||
else if (name.equals("long") ) {
|
||||
return "marshalLong";
|
||||
}
|
||||
else if (name.equals("byte")) {
|
||||
return "marshalByte";
|
||||
}
|
||||
else if (name.equals("double")) {
|
||||
return "marshalDouble";
|
||||
}
|
||||
else if (name.equals("float")) {
|
||||
return "marshalFloat";
|
||||
}
|
||||
else if (name.equals("boolean")) {
|
||||
return "marshalBoolean";
|
||||
}
|
||||
else if( !type.isPrimitiveType() ) {
|
||||
return "marshalObject" ;
|
||||
}
|
||||
else {
|
||||
return name ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to the name of the C++ unmarshal method
|
||||
* to be used
|
||||
*/
|
||||
public String toUnmarshalMethodName(JClass type) {
|
||||
String name = type.getSimpleName();
|
||||
if (name.equals("String")) {
|
||||
return "unmarshalString";
|
||||
}
|
||||
else if (type.isArrayType()) {
|
||||
if ( type.getArrayComponentType().isPrimitiveType() && name.equals("byte[]") )
|
||||
return "unmarshalByteArray" ;
|
||||
else
|
||||
return "unmarshalObjectArray" ;
|
||||
}
|
||||
else if ( name.equals("ByteSequence") ) {
|
||||
return "unmarshalByteArray";
|
||||
}
|
||||
else if (name.equals("short") ) {
|
||||
return "unmarshalShort";
|
||||
}
|
||||
else if (name.equals("int") ) {
|
||||
return "unmarshalInt";
|
||||
}
|
||||
else if (name.equals("long") ) {
|
||||
return "unmarshalLong";
|
||||
}
|
||||
else if (name.equals("byte")) {
|
||||
return "unmarshalByte";
|
||||
}
|
||||
else if (name.equals("double")) {
|
||||
return "unmarshalDouble";
|
||||
}
|
||||
else if (name.equals("float")) {
|
||||
return "unmarshalFloat";
|
||||
}
|
||||
else if (name.equals("boolean")) {
|
||||
return "unmarshalBoolean";
|
||||
}
|
||||
else if( !type.isPrimitiveType() ) {
|
||||
return "unmarshalObject" ;
|
||||
}
|
||||
else {
|
||||
return name ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Java type to a C++ pointer cast
|
||||
*/
|
||||
public String toUnmarshalCast(JClass type) {
|
||||
String name = toCppType(type) ;
|
||||
|
||||
if( name.startsWith("p<") )
|
||||
return "p_cast<" + name.substring(2) ;
|
||||
else if( name.startsWith("array<") &&
|
||||
(type.isArrayType() && !type.getArrayComponentType().isPrimitiveType()) &&
|
||||
!type.getSimpleName().equals("ByteSequence") )
|
||||
return "array_cast<" + name.substring(6) ;
|
||||
else
|
||||
return "" ;
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.activemq.openwire.tool;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @version $Revision: 379734 $
|
||||
*/
|
||||
public abstract class OpenWireCppHeadersScript extends OpenWireCppClassesScript {
|
||||
|
||||
protected String getFilePostFix() {
|
||||
return ".hpp";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,125 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import org.apache.activemq.openwire.tool.OpenWireCppClassesScript
|
||||
|
||||
/**
|
||||
* Generates the C++ commands for the Open Wire Format
|
||||
*
|
||||
* @version $Revision$
|
||||
*/
|
||||
class GenerateCppClasses extends OpenWireCppClassesScript {
|
||||
|
||||
void generateFile(PrintWriter out) {
|
||||
out << """/*
|
||||
* Copyright 2006 The Apache Software Foundation or its licensors, as
|
||||
* applicable.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "activemq/command/${className}.hpp"
|
||||
|
||||
using namespace apache::activemq::command;
|
||||
|
||||
/*
|
||||
*
|
||||
* Command and marshalling code for OpenWire format for ${className}
|
||||
*
|
||||
*
|
||||
* NOTE!: This file is autogenerated - do not modify!
|
||||
* if you need to make a change, please see the Groovy scripts in the
|
||||
* activemq-core module
|
||||
*
|
||||
*/
|
||||
${className}::${className}()
|
||||
{"""
|
||||
for (property in properties) {
|
||||
def value = toCppDefaultValue(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
this->${parameterName} = ${value} ;"""
|
||||
}
|
||||
out << """
|
||||
}
|
||||
|
||||
${className}::~${className}()
|
||||
{
|
||||
}
|
||||
|
||||
unsigned char ${className}::getDataStructureType()
|
||||
{
|
||||
return ${className}::TYPE ;
|
||||
}
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
|
||||
${type} ${className}::get${propertyName}()
|
||||
{
|
||||
return ${parameterName} ;
|
||||
}
|
||||
|
||||
void ${className}::set${propertyName}(${type} ${parameterName})
|
||||
{
|
||||
this->${parameterName} = ${parameterName} ;
|
||||
}
|
||||
"""
|
||||
}
|
||||
out << """
|
||||
int ${className}::marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException)
|
||||
{
|
||||
int size = 0 ;
|
||||
|
||||
size += ${baseClass}::marshal(marshaller, mode, ostream) ; """
|
||||
for (property in properties) {
|
||||
def marshalMethod = toMarshalMethodName(property.type)
|
||||
def propertyName = decapitalize(property.simpleName)
|
||||
out << """
|
||||
size += marshaller->${marshalMethod}(${propertyName}, mode, ostream) ; """
|
||||
}
|
||||
out << """
|
||||
return size ;
|
||||
}
|
||||
|
||||
void ${className}::unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException)
|
||||
{
|
||||
${baseClass}::unmarshal(marshaller, mode, istream) ; """
|
||||
for (property in properties) {
|
||||
def cast = toUnmarshalCast(property.type)
|
||||
def unmarshalMethod = toUnmarshalMethodName(property.type)
|
||||
def propertyName = decapitalize(property.simpleName)
|
||||
out << """
|
||||
${propertyName} = ${cast}(marshaller->${unmarshalMethod}(mode, istream)) ; """
|
||||
}
|
||||
out << """
|
||||
}
|
||||
"""
|
||||
}
|
||||
}
|
|
@ -1,153 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import org.apache.activemq.openwire.tool.OpenWireCppHeadersScript
|
||||
|
||||
/**
|
||||
* Generates the C++ commands for the Open Wire Format
|
||||
*
|
||||
* @version $Revision$
|
||||
*/
|
||||
class GenerateCppHeaders extends OpenWireCppHeadersScript {
|
||||
|
||||
void generateFile(PrintWriter out) {
|
||||
out << """/*
|
||||
* Copyright 2006 The Apache Software Foundation or its licensors, as
|
||||
* applicable.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef ActiveMQ_${className}_hpp_
|
||||
#define ActiveMQ_${className}_hpp_
|
||||
|
||||
// Turn off warning message for ignored exception specification
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning( disable : 4290 )
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
"""
|
||||
out << """#include "activemq/command/${baseClass}.hpp"
|
||||
"""
|
||||
for (property in properties)
|
||||
{
|
||||
if( !property.type.isPrimitiveType() &&
|
||||
property.type.simpleName != "String" &&
|
||||
property.type.simpleName != "ByteSequence" )
|
||||
{
|
||||
def includeName = toCppType(property.type)
|
||||
if( property.type.isArrayType() )
|
||||
{
|
||||
def arrayType = property.type.arrayComponentType ;
|
||||
if( arrayType.isPrimitiveType() )
|
||||
continue ;
|
||||
}
|
||||
if( includeName.startsWith("array<") )
|
||||
includeName = includeName.substring(6, includeName.length()-1) ;
|
||||
else if( includeName.startsWith("p<") )
|
||||
includeName = includeName.substring(2, includeName.length()-1)
|
||||
|
||||
if( includeName.equals("IDataStructure") )
|
||||
out << """#include "activemq/${includeName}.hpp"
|
||||
"""
|
||||
else
|
||||
out << """#include "activemq/command/${includeName}.hpp"
|
||||
"""
|
||||
}
|
||||
}
|
||||
out << """
|
||||
#include "activemq/protocol/IMarshaller.hpp"
|
||||
#include "ppr/io/IOutputStream.hpp"
|
||||
#include "ppr/io/IInputStream.hpp"
|
||||
#include "ppr/io/IOException.hpp"
|
||||
#include "ppr/util/ifr/array"
|
||||
#include "ppr/util/ifr/p"
|
||||
|
||||
namespace apache
|
||||
{
|
||||
namespace activemq
|
||||
{
|
||||
namespace command
|
||||
{
|
||||
using namespace ifr;
|
||||
using namespace std;
|
||||
using namespace apache::activemq;
|
||||
using namespace apache::activemq::protocol;
|
||||
using namespace apache::ppr::io;
|
||||
|
||||
/*
|
||||
*
|
||||
* Command and marshalling code for OpenWire format for ${className}
|
||||
*
|
||||
*
|
||||
* NOTE!: This file is autogenerated - do not modify!
|
||||
* if you need to make a change, please see the Groovy scripts in the
|
||||
* activemq-core module
|
||||
*
|
||||
*/
|
||||
class ${className} : public ${baseClass}
|
||||
{
|
||||
protected:
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
def name = decapitalize(property.simpleName)
|
||||
out << """ $type $name ;
|
||||
"""
|
||||
}
|
||||
out << """
|
||||
public:
|
||||
const static unsigned char TYPE = ${getOpenWireOpCode(jclass)};
|
||||
|
||||
public:
|
||||
${className}() ;
|
||||
virtual ~${className}() ;
|
||||
|
||||
virtual unsigned char getDataStructureType() ;
|
||||
"""
|
||||
for (property in properties) {
|
||||
def type = toCppType(property.type)
|
||||
def propertyName = property.simpleName
|
||||
def parameterName = decapitalize(propertyName)
|
||||
out << """
|
||||
virtual ${type} get${propertyName}() ;
|
||||
virtual void set${propertyName}(${type} ${parameterName}) ;
|
||||
"""
|
||||
}
|
||||
out << """
|
||||
virtual int marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException) ;
|
||||
virtual void unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException) ;
|
||||
} ;
|
||||
|
||||
/* namespace */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /*ActiveMQ_${className}_hpp_*/
|
||||
"""
|
||||
}
|
||||
}
|
|
@ -248,8 +248,7 @@ void MessageConsumer::doClientAcknowledge(p<ActiveMQMessage> message)
|
|||
void MessageConsumer::doAcknowledge(p<Message> message)
|
||||
{
|
||||
p<MessageAck> ack = createMessageAck(message) ;
|
||||
//cout << "Sending Ack: " << ack->getAckType() << endl ;
|
||||
session->getConnection()->syncRequest(ack) ;
|
||||
session->getConnection()->oneway(ack) ;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -32,8 +32,9 @@ using namespace apache::activemq::protocol::openwire;
|
|||
*/
|
||||
OpenWireMarshaller::OpenWireMarshaller(p<WireFormatInfo> formatInfo)
|
||||
{
|
||||
this->formatInfo = formatInfo ;
|
||||
this->encoder = CharsetEncoderRegistry::getEncoder() ;
|
||||
this->formatInfo = formatInfo ;
|
||||
this->encoder = CharsetEncoderRegistry::getEncoder() ;
|
||||
this->useTightEncoding = formatInfo->getTightEncodingEnabled() ;
|
||||
}
|
||||
|
||||
// --- Operation methods --------------------------------------------
|
||||
|
@ -46,7 +47,7 @@ int OpenWireMarshaller::marshalBoolean(bool value, int mode, p<IOutputStream> os
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeBoolean(value) ;
|
||||
|
@ -68,7 +69,7 @@ int OpenWireMarshaller::marshalByte(char value, int mode, p<IOutputStream> ostre
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeByte(value) ;
|
||||
|
@ -90,7 +91,7 @@ int OpenWireMarshaller::marshalShort(short value, int mode, p<IOutputStream> ost
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeShort(value) ;
|
||||
|
@ -112,7 +113,7 @@ int OpenWireMarshaller::marshalInt(int value, int mode, p<IOutputStream> ostream
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeInt(value) ;
|
||||
|
@ -134,7 +135,7 @@ int OpenWireMarshaller::marshalLong(long long value, int mode, p<IOutputStream>
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeLong(value) ;
|
||||
|
@ -156,7 +157,7 @@ int OpenWireMarshaller::marshalFloat(float value, int mode, p<IOutputStream> ost
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeFloat(value) ;
|
||||
|
@ -178,7 +179,7 @@ int OpenWireMarshaller::marshalDouble(double value, int mode, p<IOutputStream> o
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
dos->writeDouble(value) ;
|
||||
|
@ -200,7 +201,7 @@ int OpenWireMarshaller::marshalString(p<string> value, int mode, p<IOutputStream
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( mode == IMarshaller::MARSHAL_WRITE )
|
||||
{
|
||||
|
@ -235,7 +236,7 @@ int OpenWireMarshaller::marshalObject(p<IDataStructure> object, int mode, p<IOut
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
int size = 0 ;
|
||||
|
||||
|
@ -278,7 +279,7 @@ int OpenWireMarshaller::marshalObjectArray(array<IDataStructure> objects, int mo
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
int size = 0 ;
|
||||
|
||||
|
@ -323,7 +324,7 @@ int OpenWireMarshaller::marshalByteArray(array<char> values, int mode, p<IOutput
|
|||
// Assert that supplied output stream is a data output stream
|
||||
p<DataOutputStream> dos = checkOutputStream(ostream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
int size = 0 ;
|
||||
|
||||
|
@ -367,7 +368,7 @@ int OpenWireMarshaller::marshalByteArray(array<char> values, int mode, p<IOutput
|
|||
*/
|
||||
int OpenWireMarshaller::marshalMap(p<PropertyMap> object, int mode, p<IOutputStream> ostream) throw(IOException)
|
||||
{
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
int size = 0 ;
|
||||
|
||||
|
@ -541,7 +542,7 @@ bool OpenWireMarshaller::unmarshalBoolean(int mode, p<IInputStream> istream) thr
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readBoolean() ;
|
||||
}
|
||||
|
@ -560,7 +561,7 @@ char OpenWireMarshaller::unmarshalByte(int mode, p<IInputStream> istream) throw(
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readByte() ;
|
||||
}
|
||||
|
@ -578,7 +579,7 @@ short OpenWireMarshaller::unmarshalShort(int mode, p<IInputStream> istream) thro
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readShort() ;
|
||||
}
|
||||
|
@ -597,7 +598,7 @@ int OpenWireMarshaller::unmarshalInt(int mode, p<IInputStream> istream) throw(IO
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readInt() ;
|
||||
}
|
||||
|
@ -616,7 +617,7 @@ long long OpenWireMarshaller::unmarshalLong(int mode, p<IInputStream> istream) t
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readLong() ;
|
||||
}
|
||||
|
@ -635,7 +636,7 @@ float OpenWireMarshaller::unmarshalFloat(int mode, p<IInputStream> istream) thro
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readFloat() ;
|
||||
}
|
||||
|
@ -654,7 +655,7 @@ double OpenWireMarshaller::unmarshalDouble(int mode, p<IInputStream> istream) th
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
return dis->readFloat() ;
|
||||
}
|
||||
|
@ -673,7 +674,7 @@ p<string> OpenWireMarshaller::unmarshalString(int mode, p<IInputStream> istream)
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
if( dis->readBoolean() )
|
||||
return dis->readString() ;
|
||||
|
@ -695,7 +696,7 @@ p<IDataStructure> OpenWireMarshaller::unmarshalObject(int mode, p<IInputStream>
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
// Null marker
|
||||
if( !dis->readBoolean() )
|
||||
|
@ -728,7 +729,7 @@ array<IDataStructure> OpenWireMarshaller::unmarshalObjectArray(int mode, p<IInpu
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
// Null marker
|
||||
if( !dis->readBoolean() )
|
||||
|
@ -766,7 +767,7 @@ array<char> OpenWireMarshaller::unmarshalByteArray(int mode, p<IInputStream> ist
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
// Null marker
|
||||
if( !dis->readBoolean() )
|
||||
|
@ -801,7 +802,7 @@ p<PropertyMap> OpenWireMarshaller::unmarshalMap(int mode, p<IInputStream> istrea
|
|||
// Assert that supplied input stream is a data input stream
|
||||
p<DataInputStream> dis = checkInputStream(istream) ;
|
||||
|
||||
if( !formatInfo->getTightEncodingEnabled() )
|
||||
if( !useTightEncoding )
|
||||
{
|
||||
// Get size of map
|
||||
int size = dis->readInt() ;
|
||||
|
|
|
@ -62,6 +62,7 @@ class OpenWireMarshaller : public IMarshaller
|
|||
private:
|
||||
p<WireFormatInfo> formatInfo ;
|
||||
p<ICharsetEncoder> encoder ;
|
||||
bool useTightEncoding ;
|
||||
|
||||
public:
|
||||
// Primitive types
|
||||
|
|
|
@ -43,6 +43,9 @@ OpenWireProtocol::OpenWireProtocol()
|
|||
wireFormatInfo->setSizePrefixDisabled(false) ;
|
||||
wireFormatInfo->setTightEncodingEnabled(false) ;
|
||||
|
||||
// Use variable instead of map lookup for performance reason
|
||||
this->sizePrefixDisabled = wireFormatInfo->getSizePrefixDisabled() ;
|
||||
|
||||
// Create wire marshaller
|
||||
wireMarshaller = new OpenWireMarshaller(wireFormatInfo) ;
|
||||
}
|
||||
|
@ -87,7 +90,7 @@ void OpenWireProtocol::marshal(p<IDataStructure> object, p<IOutputStream> ostrea
|
|||
unsigned char dataType = object->getDataStructureType() ;
|
||||
|
||||
// Calculate size to be marshalled if configured
|
||||
if( !wireFormatInfo->getSizePrefixDisabled() )
|
||||
if( !sizePrefixDisabled )
|
||||
{
|
||||
size = 1 ; // data structure type
|
||||
size += object->marshal(wireMarshaller, IMarshaller::MARSHAL_SIZE, ostream) ;
|
||||
|
@ -102,7 +105,7 @@ void OpenWireProtocol::marshal(p<IDataStructure> object, p<IOutputStream> ostrea
|
|||
else // ...NULL object
|
||||
{
|
||||
// Calculate size to be marshalled if configured
|
||||
if( !wireFormatInfo->getSizePrefixDisabled() )
|
||||
if( !sizePrefixDisabled )
|
||||
{
|
||||
// Calculate size to be marshalled
|
||||
size = 1 ; // data structure type
|
||||
|
@ -125,7 +128,7 @@ p<IDataStructure> OpenWireProtocol::unmarshal(p<IInputStream> istream) throw(IOE
|
|||
int size = 0 ;
|
||||
|
||||
// Read packet size if configured
|
||||
if( !wireFormatInfo->getSizePrefixDisabled() )
|
||||
if( !sizePrefixDisabled )
|
||||
size = dis->readInt() ;
|
||||
|
||||
// First byte is the data structure type
|
||||
|
|
|
@ -57,6 +57,7 @@ class OpenWireProtocol : public IProtocol
|
|||
private:
|
||||
p<OpenWireMarshaller> wireMarshaller ;
|
||||
p<WireFormatInfo> wireFormatInfo ;
|
||||
bool sizePrefixDisabled ;
|
||||
|
||||
static const char NULL_TYPE ;
|
||||
static const int PROTOCOL_VERSION ;
|
||||
|
|
|
@ -33,11 +33,11 @@ FutureResponse::FutureResponse()
|
|||
p<Response> FutureResponse::getResponse()
|
||||
{
|
||||
// Wait for response to arrive
|
||||
LOCKED_SCOPE (mutex);
|
||||
while ( response == NULL )
|
||||
LOCKED_SCOPE (mutex) ;
|
||||
if ( response == NULL )
|
||||
{
|
||||
LOCKED_SCOPE_UNLOCK;
|
||||
semaphore->wait(maxWait); // BUG: Why have a max wait when what you do is just to wait again and again? //dafah
|
||||
semaphore->wait();
|
||||
LOCKED_SCOPE_RELOCK;
|
||||
}
|
||||
return response ;
|
||||
|
|
|
@ -197,7 +197,14 @@ p<string> DataInputStream::readString() throw(IOException)
|
|||
|
||||
// Decode string if charset encoder has been configured
|
||||
if( encoder != NULL )
|
||||
value = encoder->decode(value) ;
|
||||
{
|
||||
try {
|
||||
value = encoder->decode(value) ;
|
||||
}
|
||||
catch( CharsetEncodingException &cee ) {
|
||||
throw new IOException( cee.what() ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // ...empty string
|
||||
value = new string("") ;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "ppr/io/IInputStream.hpp"
|
||||
#include "ppr/io/encoding/ICharsetEncoder.hpp"
|
||||
#include "ppr/io/encoding/CharsetEncoderRegistry.hpp"
|
||||
#include "ppr/io/encoding/CharsetEncodingException.hpp"
|
||||
#include "ppr/util/Endian.hpp"
|
||||
#include "ppr/util/ifr/p"
|
||||
|
||||
|
|
|
@ -184,7 +184,14 @@ int DataOutputStream::writeString(p<string> value) throw(IOException)
|
|||
|
||||
// Encode string if an charset encoder has been configured
|
||||
if( encoder != NULL )
|
||||
data = encoder->encode(value, &length) ;
|
||||
{
|
||||
try {
|
||||
data = encoder->encode(value, &length) ;
|
||||
}
|
||||
catch( CharsetEncodingException &cee ) {
|
||||
throw IOException( cee.what() ) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
data = value ;
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "ppr/io/IOutputStream.hpp"
|
||||
#include "ppr/io/encoding/ICharsetEncoder.hpp"
|
||||
#include "ppr/io/encoding/CharsetEncoderRegistry.hpp"
|
||||
#include "ppr/io/encoding/CharsetEncodingException.hpp"
|
||||
#include "ppr/util/Endian.hpp"
|
||||
#include "ppr/util/ifr/p"
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ int AsciiToUTF8Encoder::length(p<string> str)
|
|||
/*
|
||||
* Encodes given string from ASCII into modified UTF-8.
|
||||
*/
|
||||
p<string> AsciiToUTF8Encoder::encode(p<string> str, int *enclen)
|
||||
p<string> AsciiToUTF8Encoder::encode(p<string> str, int *enclen) throw (CharsetEncodingException)
|
||||
{
|
||||
// Assert parameter
|
||||
if( str == NULL )
|
||||
|
@ -125,7 +125,7 @@ p<string> AsciiToUTF8Encoder::encode(p<string> str, int *enclen)
|
|||
/*
|
||||
* Decodes given string from modified UTF-8 into ASCII.
|
||||
*/
|
||||
p<string> AsciiToUTF8Encoder::decode(p<string> str)
|
||||
p<string> AsciiToUTF8Encoder::decode(p<string> str) throw (CharsetEncodingException)
|
||||
{
|
||||
// Assert argument
|
||||
if( str == NULL || str->length() == 0 )
|
||||
|
@ -159,28 +159,28 @@ p<string> AsciiToUTF8Encoder::decode(p<string> str)
|
|||
i += 2 ;
|
||||
|
||||
if( i > length )
|
||||
throw exception() ;
|
||||
throw CharsetEncodingException("Missing character in double pair") ;
|
||||
|
||||
ch2 = (*str)[i - 1] ;
|
||||
if( (ch2 & 0xC0) != 0x80 )
|
||||
throw exception() ;
|
||||
throw CharsetEncodingException("Invalid second character in double byte pair") ;
|
||||
|
||||
decstr->append( 1, (char)(((ch & 0x1F) << 6) | (ch2 & 0x3F)) ) ;
|
||||
break ;
|
||||
case 14: // Triple bytes char, 1110xxxx 10xxxxxx 10xxxxxx
|
||||
i += 3 ;
|
||||
if( i > length )
|
||||
throw exception() ;
|
||||
throw CharsetEncodingException("Missing character in triple set") ;
|
||||
|
||||
ch2 = (*str)[i - 2] ;
|
||||
ch3 = (*str)[i - 1] ;
|
||||
if( ((ch2 & 0xC0) != 0x80) || ((ch3 & 0xC0) != 0x80) )
|
||||
throw exception();
|
||||
throw CharsetEncodingException("Invalid second and/or third character in triple set") ;
|
||||
|
||||
decstr->append( 1, (char)(((ch & 0x0F) << 12) | ((ch2 & 0x3F) << 6) | ((ch3 & 0x3F) << 0)) ) ;
|
||||
break ;
|
||||
default: // Unsupported, 10xxxxxx 1111xxxx
|
||||
throw exception() ;
|
||||
throw CharsetEncodingException("Unsupported type flag") ;
|
||||
}
|
||||
}
|
||||
return decstr ;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <string>
|
||||
#include <ppr/io/ByteArrayOutputStream.hpp>
|
||||
#include <ppr/io/encoding/ICharsetEncoder.hpp>
|
||||
#include <ppr/io/encoding/CharsetEncodingException.hpp>
|
||||
#include <ppr/util/ifr/array>
|
||||
#include <ppr/util/ifr/p>
|
||||
|
||||
|
@ -50,8 +51,8 @@ public:
|
|||
virtual ~AsciiToUTF8Encoder() ;
|
||||
|
||||
virtual int length(p<string> str) ;
|
||||
virtual p<string> encode(p<string> str, int *enclen) ;
|
||||
virtual p<string> decode(p<string> str) ;
|
||||
virtual p<string> encode(p<string> str, int *enclen) throw (CharsetEncodingException) ;
|
||||
virtual p<string> decode(p<string> str) throw (CharsetEncodingException) ;
|
||||
} ;
|
||||
|
||||
/* namespace */
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright 2006 The Apache Software Foundation or its licensors, as
|
||||
* applicable.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef Ppr_CharsetEncodingException_hpp_
|
||||
#define Ppr_CharsetEncodingException_hpp_
|
||||
|
||||
#include "ppr/TraceException.hpp"
|
||||
|
||||
namespace apache
|
||||
{
|
||||
namespace ppr
|
||||
{
|
||||
|
||||
/*
|
||||
* Signals that a character encoding or decoding error has occurred.
|
||||
*/
|
||||
class CharsetEncodingException : public TraceException
|
||||
{
|
||||
public:
|
||||
CharsetEncodingException() : TraceException()
|
||||
{ /* no-op */ } ;
|
||||
CharsetEncodingException(const char *const& msg) : TraceException(msg)
|
||||
{ /* no-op */ } ;
|
||||
CharsetEncodingException(const char* fileName, int lineNo, const char* msg) : TraceException(msg)
|
||||
{ /* no-op */ } ;
|
||||
} ;
|
||||
|
||||
/* namespace */
|
||||
}
|
||||
}
|
||||
|
||||
#endif /*Ppr_CharsetEncodingException_hpp_*/
|
|
@ -18,6 +18,7 @@
|
|||
#define Ppr_ICharsetEncoder_hpp_
|
||||
|
||||
#include <string>
|
||||
#include <ppr/io/encoding/CharsetEncodingException.hpp>
|
||||
#include "ppr/util/ifr/array"
|
||||
#include "ppr/util/ifr/p"
|
||||
|
||||
|
@ -39,8 +40,8 @@ namespace apache
|
|||
struct ICharsetEncoder : Interface
|
||||
{
|
||||
virtual int length(p<string> str) = 0 ;
|
||||
virtual p<string> encode(p<string> str, int *enclen) = 0 ;
|
||||
virtual p<string> decode(p<string> str) = 0 ;
|
||||
virtual p<string> encode(p<string> str, int *enclen) throw (CharsetEncodingException) = 0 ;
|
||||
virtual p<string> decode(p<string> str) throw (CharsetEncodingException) = 0 ;
|
||||
} ;
|
||||
|
||||
/* namespace */
|
||||
|
|
|
@ -56,11 +56,10 @@ void TestSynchQueue::execute() throw (exception)
|
|||
|
||||
// Connect to queue
|
||||
queue = session->getQueue("FOO.BAR") ;
|
||||
|
||||
|
||||
// Create a consumer and producer
|
||||
consumer = session->createConsumer(queue) ;
|
||||
producer = session->createProducer(queue) ;
|
||||
producer->setPersistent(true) ;
|
||||
|
||||
// Create a message
|
||||
reqMessage = session->createTextMessage("Hello World!") ;
|
||||
|
@ -78,17 +77,26 @@ void TestSynchQueue::execute() throw (exception)
|
|||
throw TraceException("Received a null message") ;
|
||||
else
|
||||
{
|
||||
p<string> str ;
|
||||
|
||||
props = rspMessage->getProperties() ;
|
||||
item = (*props)["someHeader"] ;
|
||||
|
||||
// Verify message
|
||||
if( rspMessage->getJMSCorrelationID()->compare("abc") != 0 )
|
||||
str = rspMessage->getJMSCorrelationID() ;
|
||||
if( str == NULL || str->compare("abc") != 0 )
|
||||
throw TraceException("Returned message has invalid correlation ID") ;
|
||||
if( rspMessage->getJMSXGroupID()->compare("cheese") != 0 )
|
||||
|
||||
str = rspMessage->getJMSXGroupID() ;
|
||||
if( str == NULL || str->compare("cheese") != 0 )
|
||||
throw TraceException("Returned message has invalid group ID") ;
|
||||
if( rspMessage->getText()->compare("Hello World!") != 0 )
|
||||
|
||||
str = rspMessage->getText() ;
|
||||
if( str == NULL || str->compare("Hello World!") != 0 )
|
||||
throw TraceException("Returned message has altered body text") ;
|
||||
if( item.getString()->compare("James") != 0 )
|
||||
|
||||
str = item.getString() ;
|
||||
if( str == NULL || str->compare("James") != 0 )
|
||||
throw TraceException("Returned message has invalid properties") ;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue