Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HazelcastSerializationException依赖于操作系统_Java_Linux_Windows_Serialization_Hazelcast - Fatal编程技术网

Java HazelcastSerializationException依赖于操作系统

Java HazelcastSerializationException依赖于操作系统,java,linux,windows,serialization,hazelcast,Java,Linux,Windows,Serialization,Hazelcast,最近我收到了一些关于HZ的奇怪错误。序列化/反序列化。我有一台装有hazelcast服务器的Windows服务器。在我在Linux机器上运行的测试中,我可以通过HazelcastClient API连接到Hazelcast服务器,注册SerializationFactory并从HZ服务器获取一些集合。 我使用简单的IdentifiedDataSerializable接口来序列化/反序列化实体。 实体由3个字段组成:字符串、整型、整型 结果我得到HazelcastSerializationExce

最近我收到了一些关于HZ的奇怪错误。序列化/反序列化。我有一台装有hazelcast服务器的Windows服务器。在我在Linux机器上运行的测试中,我可以通过HazelcastClient API连接到Hazelcast服务器,注册SerializationFactory并从HZ服务器获取一些集合。 我使用简单的IdentifiedDataSerializable接口来序列化/反序列化实体。 实体由3个字段组成:字符串、整型、整型

结果我得到HazelcastSerializationException。这是因为Windows和Linux机器之间的差异吗

这就是测试用例:

import java.io.IOException;
import java.util.Arrays;
import java.util.Set;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.config.ClientNetworkConfig;
import com.hazelcast.config.GroupConfig;
import com.hazelcast.config.SerializationConfig;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.DataSerializableFactory;
import com.hazelcast.nio.serialization.HazelcastSerializationException;
import com.hazelcast.nio.serialization.IdentifiedDataSerializable;

/**
 *
 * @author igor.masternoy
 *
 */
@RunWith(BlockJUnit4ClassRunner.class)
public class HZSerialTest {
  private static final int FACROTY_ID = 42;
  private static final int ENTITY_ID = 42;
  private static final String WINDOWS_HZ_SERVER_IP = "###.###.###.###";
  private static final String TEST_FIELD = "CHESTERFIELD";
  private static final String TEST_COLLECTION = "CHESTERFIELD";

  @Test(expected = HazelcastSerializationException.class)
  public void test() {
    ClientConfig clientConfig = new ClientConfig();
    ClientNetworkConfig networkConfig = clientConfig.getNetworkConfig();
    String[] serverAddresses = new String[] { WINDOWS_HZ_SERVER_IP };
//    logger.info("Hazelcast servers IPs {" + Arrays.toString(serverAddresses) + "}");
    networkConfig.addAddress(serverAddresses);
    networkConfig.setSmartRouting(true);
    networkConfig.setConnectionTimeout(30000);
    clientConfig.setGroupConfig(new GroupConfig("dev",
                                                "dev-pass"));

    SerializationConfig serializationConfig = clientConfig.getSerializationConfig();

    serializationConfig
        .addDataSerializableFactory(FACROTY_ID, new TestObjectSerializationFactory());

    clientConfig.setSerializationConfig(serializationConfig);

    HazelcastInstance instance = HazelcastClient.newHazelcastClient(clientConfig);

    Set<TestEntity> testSet = instance.getSet(TEST_COLLECTION);
    testSet.add(new TestEntity(1, 1, TEST_FIELD));
    testSet = instance.getSet(TEST_COLLECTION);

    IMap<String, TestEntity> map = instance.getMap("test.map");
    map.put("key", new TestEntity(1, 1, TEST_FIELD));

    TestEntity entity = testSet.iterator().next();
//    logger.info("{}", entity);

    entity = map.get("key");

//    logger.info("{}", entity);

  }

  class TestObjectSerializationFactory implements DataSerializableFactory {

    @Override
    public IdentifiedDataSerializable create(int typeId) {
      IdentifiedDataSerializable obj = null;
      switch (typeId) {
      case 42:
        obj = new TestEntity();
        break;
      default:
//        logger.error("Wow wo?w wow not a case");
        break;
      }
      return obj;
    }

  }

  class TestEntity implements IdentifiedDataSerializable {

    private String field;
    private int field2;
    private int field3;

    public TestEntity() {
    }

    public TestEntity(int field2,
                      int field3,
                      String field) {
      super();
      this.field = field;
    }

    @Override
    public void readData(ObjectDataInput in) throws IOException {
      field = in.readUTF();
      field2 = in.readInt();
      field3 = in.readInt();
    }

    @Override
    public void writeData(ObjectDataOutput out) throws IOException {
      out.writeUTF(field);
      out.writeInt(field2);
      out.writeInt(field3);

    }

    @Override
    public int getFactoryId() {
      return FACROTY_ID;
    }

    @Override
    public int getId() {
      return ENTITY_ID;
    }

    @Override
    public String toString() {
      return "TestEntity [field=" + field + field2 + field3 + "]";
    }
  }

}

Igor,你能提供Hazelcast版本和完整的异常跟踪吗。谢谢哦,对不起。我忘了堆栈跟踪中有一些有趣的东西,比如“com.hazelcast.nio.serialization.HazelcastSerializationException:java.io.eofeexception:无法读取4字节!”
com.hazelcast.nio.serialization.HazelcastSerializationException: java.io.EOFException: Cannot read 4 bytes!
    at com.hazelcast.nio.serialization.SerializationServiceImpl.handleException(SerializationServiceImpl.java:380)
    at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:282)
    at com.hazelcast.client.spi.ClientProxy.toObject(ClientProxy.java:183)
    at com.hazelcast.client.proxy.AbstractClientCollectionProxy.getAll(AbstractClientCollectionProxy.java:205)
    at com.hazelcast.client.proxy.AbstractClientCollectionProxy.iterator(AbstractClientCollectionProxy.java:83)
    at com.bam.messaging.HZSerialTest.test(HZSerialTest.java:71)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.io.EOFException: Cannot read 4 bytes!
    at com.hazelcast.nio.serialization.ByteArrayObjectDataInput.checkAvailable(ByteArrayObjectDataInput.java:543)
    at com.hazelcast.nio.serialization.ByteArrayObjectDataInput.readInt(ByteArrayObjectDataInput.java:255)
    at com.hazelcast.nio.serialization.ByteArrayObjectDataInput.readInt(ByteArrayObjectDataInput.java:249)
    at com.bam.messaging.HZSerialTest$TestEntity.readData(HZSerialTest.java:117)
    at com.hazelcast.nio.serialization.DataSerializer.read(DataSerializer.java:111)
    at com.hazelcast.nio.serialization.DataSerializer.read(DataSerializer.java:39)
    at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:41)
    at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:276)
    ... 27 more